Spring Data Redis整合Redis流程源码分析

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】

一:版本信息如下.

1.1 SpringBoot的版本:1.5.10.RELEASE.

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

使用 spring-boot-starter-data-redis.(这里不同在引入jedis了,已经引入了).查看Maveny依赖 1.8.10.RELEASE的版本

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

20191102100693\_1.png

二:SpringBoot对Redis的支持.

2.1 根据Redis的不同的Java客户端(jedis和jredis以及Lettuce和Spullara),Spring Data Redis提供的ConnectionFactory.

看一下源码目录,加深理解.工厂设计模式案例如下.

SpringBoot默认为我们配置了JedisConnectionFactory,RestTemplate,StringRedisTemplate,我们可以直接通过配置文件,指定Redis服务器host,port,password,database,以及一些连接池,使我们直接在SpringBoot添加Spring-data-redis直接注入RedisTemplate和StringRedisTemplate后可以直接进行业务操作了.那个创建连接工厂,以及配置RestTemplate等就不需要我们来实现了.只为简洁明了.通过源码可以看到,SpringBoot为这些常用的框架都多了默认的整合配置,就好比泡面佐料已经配好了,你在需要吃的时候只需要注入热水即可.

同时SpringBoot为我们默认的配置如下.

位于

20191102100693\_2.png

20191102100693\_3.png

20191102100693\_4.png

20191102100693\_5.png

20191102100693\_6.png可以看到在自动配置的类中,引用了spring.data.redis.xxx的实现类,这也是为什么要SpringBoot Data Redis引入依赖的原因.

RedisConnectionFactory

20191102100693\_7.png

RedisCommands(接口多继承各种操作命令接口).

20191102100693\_8.png

RedisKeyCommands(常用的key操作封装为key命令接口).就是将Redis的各种命令封装成了Java的实现方法了.

20191102100693\_9.png

RedisConnection(定义Redis的连接抽象方法)

20191102100693\_10.png

JedisConnectionFactory

20191102100693\_11.png

20191102100693\_12.png

20191102100693\_13.png

AbstractRedisConnection(定义抽象的连接方法,实现RedisConnection)

20191102100693\_14.png

JedisConnection(具体的连接产品继承抽象连接类,实现自己的连接方式)

20191102100693\_15.png

JredisConnection

20191102100693\_16.png

上述整理了一下各个连接接口类这下清晰多了.

2.2 配置Redis.

SpringBoot为Redis已经自动注入了两个模板类,先来看一下吧.RedisTemplate和StringTemplate进行数据操作.StringRedisTemplate只是对键值都是字符型的数据操作.

20191102100693\_17.png

20191102100693\_18.png

20191102100693\_19.png

使用条件注解,当这个RedisAutoConfiguration缺少Bean时,默认注入一个name是redisTemplate的模板类.

20191102100693\_20.png

20191102100693\_21.png

RedisTemplate类

20191102100693\_22.png

RedisOperations(封装了Redis的各种数据操作)

20191102100693\_23.png

20191102100693\_24.png

RedisOperations

20191102100693\_25.png

20191102100693\_26.png

20191102100693\_27.png

其中每一种操作类型有都进行了接口封装.下面就看一下五种数据类型的操作接口.

ValueOperations<K,V>

20191102100693\_28.png

ListOperations<K,V>对应List

20191102100693\_29.png

SetOperations<K, V>对应Set

20191102100693\_30.png

ZSetOperations<K,V>对应Sorted Set

20191102100693\_31.png

HashOperations<H, HK, HV>对应于Hash.

20191102100693\_32.png

2.3 两个模板类提供的数据访问方法.(五种类型的数据操作方法).这些方法调用Redis的命令的方式提供了实现.当然还有基于注解的操作Redis.

opsForValue():操作只有简单属性的数据.String.

opsForList():操作含有list的数据.

opsForSet():操作含有set的数据

opsForZSet():操作含有ZSet(有序的set)的数据.

opsForHash():操作含有hash的数据.

2.4 Serializer的定义.

我们数据存储到Redis的时候,我们的键值Key和Value都是通过Spring提供的Serializer序列化到db中的.不是有16个db嘛.

RedisTemplate默认使用的是JdkSerializationRedisSerializer.

RedisTemplate位于org.springframework.data.redis.core;

20191102100693\_33.png

StringRedisTemplate默认使用的是StringRedisSerizlizer.

StringrRedisTemplate位于org.springframework.data.redis.core;

20191102100693\_34.png

那么Spring Data为我们都提供了哪些序列化的工具呐?一起来看一看吧.

20191102100693\_35.png

20191102100693\_36.png

看一下Java客户端连接工具Jedis的实现.

20191102100693\_37.png

20191102100693\_38.png

至此简单的了解了SpringBoot为Redis的默认配置以及我们的引入Spring Data Redis都完成了哪些配置任务,整合Redis有了更加更清晰的认识,其他的Data大多也是这样实现的思路.


来源:http://ddrv.cn

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Spring Data Redis整合Redis流程源码分析

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏