spring-data-redis底层源码解析
1. 对SpringDataRedis介绍
SpringDataRedis是Spring大家族中的一个成员,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现,spring redis同时支持了Jedis,Jredis,rjc 客户端操作。
2.spring redis 源码设计逻辑
- Redis连接管理:封装了Jedis,Jredis,Rjc等不同redis 客户端连接
- Redis操作封装:value,list,set,sortset,hash划分为不同操作
- Redis序列化:能够以插件的形式配置想要的序列化实现
- Redis操作模板化: redis操作过程分为:获取连接,业务操作,释放连接;模板方法使得业务代码只需要关心业务操作
- Redis事务模块:在同一个回话中,采用同一个redis连接完成
3. spring redis连接管理模块分析
spring redis封装了不同redis 客户端,对于底层redis客户端的抽象分装,使其能够支持不同的客户端;连接管理模块的具体类大概有以下:
类名 | 职责 |
---|---|
RedisConnection | 提供了Redis通信的核心构建块,因为它处理与Redis后端通信。它还自动将底层连接库异常转换为Spring一致的DAO异常层次结构,这样就可以在不更改任何代码的情况下切换连接器,因为操作语义保持不变。(简单理解下,就是用来连接Redis的) |
RedisConnectionFactory | 是构建RedisConnection的工厂类 |
RedisCommands | 继承了Redis各种数据类型操作的整合接口 |
JedisConnection | 实现RedisConnection接口,将操作委托给Jedis |
JedisConnectionFactory | 实现RedisConnectionFactory接口,创建JedisConnection |
spring-data-redis针对jedis提供了如下功能:
- 连接池自动管理,提供了一个高度封装的“RedisTemplate”类
通过RedisTemplate处理对象
RedisTemplate是Spring为方便操作Redis各种命令而封装出来的工具类,是spring data redis 中的核心操作类,提供了丰富的,通用的接口,用于针对某种类型或某些键
2. 针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
关键绑定操作
BoundGeoOperations | Redis键绑定地理空间操作 |
---|---|
BoundHashOperations | Redis哈希键绑定操作 |
BoundKeyOperations | Redis键绑定操作 |
BoundListOperations | Redis列表键绑定操作 |
BoundSetOperations | Redis设置键绑定操作 |
BoundValueOperations | Redis字符串(或值)键绑定操作 |
BoundZSetOperations | Redis zset(或排序集)键绑定操作 |
RedisOperations<K,V>
RedisTemplate实现了RedisOperations
RedisOperations(封装了Redis的各种数据操作)
其中每一种操作类型有都进行了接口封装.下面就看一下五种数据类型的操作接口
ValueOperations<K,V>
ListOperations<K,V>对应List
SetOperations<K, V>对应Set
ZSetOperations<K, V>对应 sortedSet
HashOperations<H, HK, HV>对应于Hash
两个模板类提供的数据访问方法.(五种类型的数据操作方法).这些方法调用Redis的命令的方式提供了实现.当然还有基于注解的操作Redis.
opsForValue():操作只有简单属性的数据.String.
opsForList():操作含有list的数据.
opsForSet():操作含有set的数据
opsForZSet():操作含有ZSet(有序的set)的数据.
opsForHash():操作含有hash的数据.
序列化器 Serializer
在Spring Data中,用户(自定义)类型和原始数据之间的转换(反之亦然)在org.springframework.data.redis.serializer包中的Redis中进行处理
我们数据存储到Redis的时候,我们的键值Key和Value都是通过Spring提供的Serializer序列化到db中的
spring data 提供的序列化工具
提供的有相关的序列化器
4. demo项目配置
(1) 构建 Maven 工程 SpringDataRedisDemo
(2) 添加相关启动器Lombok、Spring Data Redis、spring-data-common
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 使用spring-data-common -->