SpringDataRedis入门
目录
SpringDataRedis简单介绍
RedisTemplate工具类
与Jedis相比SpringDataRedis的核心优势
SpringDataRedis快速入门
引入依赖
配置文件
注入RedisTemplate即可使用
SpringDataRedis的序列化方式**
方案一:
存在的问题
方案二:(推荐)
解释:
总结两种方案
SpringDataRedis简单介绍
RedisTemplate工具类
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类中:
与Jedis相比SpringDataRedis的核心优势
-
简化开发流程
- 自动连接管理:无需编写
jedis.get()
/jedis.close()
等样板代码 - 统一 API 模板:通过
RedisTemplate
封装不同数据类型的操作(如opsForList()
操作列表) - 注解式缓存支持:兼容 Spring Cache 注解(如
@Cacheable
),实现声明式缓存
- 自动连接管理:无需编写
-
灵活的序列化机制
支持自定义序列化策略(如Jackson2JsonRedisSerializer
存储 JSON 对象),而 Jedis 需手动转换对象与字节数组。 -
生态无缝集成
- 依赖注入:可直接通过
@Autowired
注入RedisTemplate
- 事务管理:与 Spring 事务框架(如
@Transactional
)协同工作 - 高级特性:内置支持发布订阅、集群、哨兵模式
- 依赖注入:可直接通过
-
驱动可拔插性
可在 Jedis 和 Lettuce(高性能 Netty 驱动)间切换,无需修改业务代码
SpringDataRedis快速入门
引入依赖
配置文件
注入RedisTemplate即可使用
SpringDataRedis的序列化方式
默认是采用JDK序列化。
方案一:
因此可以创建一个配置类:RedisConfig.class,自定义序列化方式(约定key都为String类型,value可以随意),实现全自动序列化和反序列化。
存在的问题
方案二:(推荐)
解释:
由于StringRedisTemplate内置了针对String类型的序列化器,该序列化器会自动将 Java 的 String
转换为字节数组(例如 UTF-8 编码)存储到 Redis,读取时自动将字节数组还原为 Java 的 String
对象,所以存储字符串类型的数据无需手动序列化。
但是存储对象类型需手动序列化:
String json = mapper.writeValueAsString(user);
通过 Jackson 的 ObjectMapper
将 Java 对象 user
转换为 JSON 格式的字符串。
而
stringRedisTemplate.opsForValue().set("user:200", json);
仅存储已序列化的字符串:StringRedisTemplate
默认使用 StringRedisSerializer
,直接将 JSON 字符串以二进制形式写入 Redis(无需二次转换)。
通过这两步实现了职责分离原则,序列化和存储两步完全独立。
总结两种方案
方案一容易增加不必要的存储,方案二则需要手动序列化对象,各有优缺点,可自行选择。