一. 简介
Spring Data Redis是spring基于Redis做的一些模块化功能,是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
二. 概念
首先须要了解几个具体类的概念:
RedisConnection:
提供了Redis通信的核心构建块,因为它处理与Redis后端通信。它还自动将底层连接库异常转换为Spring一致的DAO异常层次结构,这样您就可以在不更改任何代码的情况下切换连接器,因为操作语义保持不变。(翻译自官网解释,其实简单理解下,就是用来连接Redis的)
RedisConnectionFactory:
是构建RedisConnection的工厂类
RedisStandaloneConfiguration:
Redis标准配置,用来构建RedisConnectionFactory须要的必要参数,比如host;port;password
RedisSentinelConfiguration:
Redis哨兵模式的相关配置
RedisClusterConfiguration:
Redis集群模式的相关配置
RedisCacheManager:
顾名思义是Redis缓存管理器,是Spring基于Redis实现缓存的核心类
RedisCacheConfiguration:
是RedisCacheManager的具体个性化配置项
RedisCacheManagerBuilder:
是RedisCacheManager的构建器,内部维护了RedisConnectionFactory
RedisTemplate:
同样底层是维护了RedisConnectionFactory,在Spring Data Redis中和RedisCacheManager属于不同的Redis应用模块,RedisCacheManager负责Redis数据缓存的核心实现,RedisTemplate是Spring为方便操作Redis各种命令而封装出来的工具类,其功能类似于jedis。
三. spring-data-redis针对jedis提供了如下功能:
1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
-
ValueOperations:简单K-V操作
-
SetOperations:set类型数据操作
-
ZSetOperations:zset类型数据操作
-
HashOperations:针对map类型的数据操作
-
ListOperations:针对list类型的数据操作
3.提供了对key的“bound”(绑定)便捷化操作API,可以通过bound封装指定的key,然后进行一系列的操作而无须“显式”的再次指定Key,即BoundKeyOperations: -
BoundValueOperations
-
BoundSetOperations
-
BoundListOperations
-
BoundSetOperations
| | |
|–|--|
| | | -
BoundHashOperations
4.将事务操作封装,有容器控制。
5.针对数据的“序列化/反序列化”,提供了多种可选择策略(RedisSerializer)
四. 序列化器
spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer:
JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储
StringRedisSerializer:字符串编码,数据以string存储
JacksonJsonRedisSerializer:json格式存储
OxmSerializer:xml格式存储
其中JdkSerializationRedisSerializer和StringRedisSerializer是最基础的序列化策略,其中“JacksonJsonRedisSerializer”与“OxmSerializer”都是基于stirng存储,因此它们是较为“高级”的序列化(最终还是使用string解析以及构建java对象)。
RedisTemplate中需要声明4种serializer,默认为“JdkSerializationRedisSerializer”:
- keySerializer :对于普通K-V操作时,key采取的序列化策略
- valueSerializer:value采取的序列化策略
- hashKeySerializer: 在hash数据结构中,hash-key的序列化策略
- hashValueSerializer:hash-value的序列化策略
无论如何,建议key/hashKey采用StringRedisSerializer。
五. @Transactional注解支持
Spring Data Redis提供了对Redis的事务支持,如:multi, exec, discard命令。
注解事务支持在默认情况下是禁用的,必须通过把RedisTemplate设置明确开启事务支持:setEnableTransactionSupport(true),如果没有错误即成功,有错误就全部回滚。当前连接所有写操作都会进入操作队列,读操作会转移到一个新的连接。
示例配置
@Configuration
public class RedisTxContextConfiguration {
@Bean
public StringRedisTemplate redisTemplate() {
StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory());
// explicitly enable transaction support
template.setEnableTransactionSupport(true);
return template