- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
8.3 对象转换
因为 Redis 直接处理字节数组并没有原生支持对象到 byte[]的转换,Spring Data Redis 项目提供了一些帮助类,以便于更加简单地从 Java 代码中读取和写入数据。默认情况下,所有的键和值都存储为序列化的 Java 对象。不过,如果要大量地处理 String,也会有一个模板类 - StringRedisTemplate,如示例 8-6 所示 - 这样就安装了 String 的序列化器(serializer),所带来的好处就是 Redis 命令行界面的键和值更加易于人工阅读。
示例 8-6 使用 StringRedisTemplate
为了影响键和值进行序列化和反序列化的方式,Spring Data Redis 提供了 RedisSerializer 抽象,它负责对 Redis 中所存储的字节进行实际上的读取和写入。我们需要为模板的 keySerializer 或 valueSerializer 属性设置一个 org.springframework. data.redis.serializer.RedisSerializer 实例。String 已经有一个内置的 RedisSerializer,所以对于 String 类型作为键并且 Long 类型作为值的情况下,需要为 Long 类型创建一个序列化器,如示例 8-7 所示。
示例 8-7 创建可重用的序列化器
为了在使用 Redis 时借助这些序列化器来简化类型转换,需要设置模板类的 keySerializer 和 valueSerializer 属性,如示例 8-8 所示的 JavaConfig 代码片段。
示例 8-8 在模板实例中使用序列化器
{:--}
现在,可以存储数字到 Redis 中,而不用担心 byte[]到 Long 之间的类型转换了。因为 Redis 提供了如此之多的操作(帮助类中会有很多的方法),所以 set 和 get 值的方法定义在各个 RedisOperation 接口之中( http://static.springsource.org/spring-data/data-redis/docs/current/api/org/springframework/data/redis/core/package-summary.html )。通过在 RedisTemplate 中调用对应的 opsForX 方法,可以访问到这些接口。因为在示例中我们只会存储离散的值,所以将会用到的是 ValueOperations 模板,如示例 8-9 所示。
示例 8-9 当 set 和 get 值时,自动进行类型转换
在应用中调用这个方法并将 id 值为 1 的 Product 传递进来的时候,可以在 redis-cli 中查看这个值,通过在命令行中使用 get product-counts:1,可以看到字符串“1”。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论