返回介绍

8.3 对象转换

发布于 2025-04-22 19:57:20 字数 2065 浏览 0 评论 0 收藏

因为 Redis 直接处理字节数组并没有原生支持对象到 byte[]的转换,Spring Data Redis 项目提供了一些帮助类,以便于更加简单地从 Java 代码中读取和写入数据。默认情况下,所有的键和值都存储为序列化的 Java 对象。不过,如果要大量地处理 String,也会有一个模板类 - StringRedisTemplate,如示例 8-6 所示 - 这样就安装了 String 的序列化器(serializer),所带来的好处就是 Redis 命令行界面的键和值更加易于人工阅读。

示例 8-6 使用 StringRedisTemplate

P130b

P131a

为了影响键和值进行序列化和反序列化的方式,Spring Data Redis 提供了 RedisSerializer 抽象,它负责对 Redis 中所存储的字节进行实际上的读取和写入。我们需要为模板的 keySerializer 或 valueSerializer 属性设置一个 org.springframework. data.redis.serializer.RedisSerializer 实例。String 已经有一个内置的 RedisSerializer,所以对于 String 类型作为键并且 Long 类型作为值的情况下,需要为 Long 类型创建一个序列化器,如示例 8-7 所示。

示例 8-7 创建可重用的序列化器

P131b

为了在使用 Redis 时借助这些序列化器来简化类型转换,需要设置模板类的 keySerializer 和 valueSerializer 属性,如示例 8-8 所示的 JavaConfig 代码片段。

示例 8-8 在模板实例中使用序列化器

P131c {:--}P132a

现在,可以存储数字到 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 值时,自动进行类型转换

P132b

在应用中调用这个方法并将 id 值为 1 的 Product 传递进来的时候,可以在 redis-cli 中查看这个值,通过在命令行中使用 get product-counts:1,可以看到字符串“1”。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。