spring-data-redis介绍+ 源码解析 +简单配置

一. 简介

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”:

  1. keySerializer :对于普通K-V操作时,key采取的序列化策略
  2. valueSerializer:value采取的序列化策略
  3. hashKeySerializer: 在hash数据结构中,hash-key的序列化策略
  4. 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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值