Spring Data Redis源码解析

Spring Data Redis

Spring Data Redis是较大的Spring Data系列的一部分,可轻松配置并从Spring应用程序访问Redis。它提供了与商店交互的低层和高层抽象,使用户摆脱了基础设施的困扰。

.为什么使用Spring Data Redis?

Spring框架是领先的全栈Java / JEE应用程序框架。它提供了一个轻量级的容器和一个非侵入性编程模型,该模型通过使用依赖项注入,AOP和可移植服务抽象来实现。

NoSQL存储系统为水平可伸缩性和速度提供了传统RDBMS的替代方案。在实现方面,键值存储代表NoSQL空间中最大(和最旧)的成员之一。

Spring Data Redis(SDR)框架通过Spring出色的基础架构支持消除了与存储库交互所需的冗余任务和样板代码,从而简化了编写使用Redis键值存储库的Spring应用程序的过程。

SpringBoot对Redis的支持

1. Redis 连接
spring redis封装了不同redis 客户端,对于底层redis客户端的抽象分装,使其能够支持不同的客户端,基于工厂模式和代理模式设计的spring redis 连接管理模块,可以方面接入不同的redis客户端, Jedis,Jredis,Rjc等,而不影响上层代码
连接接管理模块的类大概有以下:

类名作用
RedisCommands继承了Redis各种数据类型操作的整合接口(BaseRedisCommands<K, V>, RedisClusterCommands<K, V>, RedisGeoCommands<K, V>, RedisHashCommands<K, V>, RedisHLLCommands<K, V>, RedisKeyCommands<K, V>, RedisListCommands<K, V>, RedisScriptingCommands<K, V>, RedisServerCommands<K, V>, RedisSetCommands<K, V>, RedisSortedSetCommands<K, V>, RedisStreamCommands<K, V>, RedisStringCommands<K, V>, RedisTransactionalCommands<K, V> )
RedisConnection抽象了不同底层redis客户端类型:不同类型的redis客户端可以创建不同实现,提供了Redis通信的核心构建块,它处理与Redis后端的通信
RedisConnectionFactory抽象Redis连接工厂,不同类型的redis客户端实现不同的工厂( RedisConnection getConnection();)
JedisConnection实现RedisConnection接口,将操作委托给Jedis
JedisConnectionFactory实现RedisConnectionFactory接口,创建JedisConnection

2. 通过RedisTemplate处理对象
2.1. Redis Template 的注入
当要使用Spring Boot提供的redis客户端功能时,注入RedisTemplate的流程

1.pom中引入spring-boot-starter-data-redis,并配置application.properties。

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:mldn
spring.datasource.username=scott
spring.datasource.password=tiger
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

2.pom会根据spring-boot-starter-data-redis来引入spring-data-redis。
在这里插入图片描述
3.spring-data-redis中包含RedisOperations类。
在这里插入图片描述
在这里插入图片描述
4.启动Spring Boot,在refreshContext(context);中会初始化beanFactory,读取配置信息,初始化Spring容器,注入bean。因为@EnableAutoConfiguration开启的关系,会读取配置中EnableAutoConfiguration相关的类,并实例化注入Spring 容器。
5.根据配置文件扫描到RedisAutoConfiguration。当RedisOperations存在时RedisAutoConfiguration才会被扫描。
6.通过@EnableConfigurationProperties(RedisProperties.class)和@ConfigurationProperties(prefix = “spring.redis”),把application.properties中的对应属性进行绑定,并注入RedisProperties配置类。
7.RedisAutoConfiguration中的@Import会引入LettuceConnectionConfiguration和JedisConnectionConfiguration
8.LettuceConnectionConfiguration和JedisConnectionConfiguration被扫描,扫描到内部的@Bean,使用上一步中注入的RedisProperties bean作为参数来实例化LettuceConnectionFactory和JedisConnectionFactory,并以RedisConnectionFactory类注入Spring容器。
8.扫描并注入RedisAutoConfiguration类内的@Bean,其中会使用RedisConnectionFactory bean作参数实例化RedisTemplate。
9.将RedisTemplate实例注入。
10.然后就能通过引用RedisTemplate来操作redis了。
2.2 Redis Template 的操作方法
RedisTemplate是Spring为方便操作Redis各种命令而封装出来的工具类,是spring data redis 中的核心操作类,提供了丰富的,通用的接口,用于针对某种类型或某些键

在这里插入图片描述
按键类型操作

GeoOperationsRedis的地理空间操作的,比如GEOADD,GEORADIUS…
HashOperationsRedis哈希操作
HyperLogLogOperationsRedis的HyperLogLog操作,例如PFADD,PFCOUNT,…
ListOperationsRedis列表操作
SetOperationsRedis设置操作
ValueOperationsRedis字符串(或值)操作
ZSetOperationsRedis zset(或排序集)操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关键绑定操作

BoundGeoOperationsRedis键绑定地理空间操作
BoundHashOperationsRedis哈希键绑定操作
BoundKeyOperationsRedis键绑定操作
BoundListOperationsRedis列表键绑定操作
BoundSetOperationsRedis设置键绑定操作
BoundValueOperationsRedis字符串(或值)键绑定操作
BoundZSetOperationsRedis 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的数据.

3. 序列化器 Serializer
在Spring Data中,用户(自定义)类型和原始数据之间的转换(反之亦然)在org.springframework.data.redis.serializer包中的Redis中进行处理
我们数据存储到Redis的时候,我们的键值Key和Value都是通过Spring提供的Serializer序列化到db中的
在这里插入图片描述
spring data 提供的序列化工具
在这里插入图片描述
JdkSerializationRedisSerializer,默认用于RedisCache和RedisTemplate的StringRedisSerializer。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值