快捷搜索:  汽车  科技

springboot中redis的使用详解(SpringBoot整合Redis)

springboot中redis的使用详解(SpringBoot整合Redis)RedisTemplate默认的序列化方式为JDKSerializationRedisSerializer,会把对象序列化存储到Redis中(二进制形式),StringRedisTemplate的默认序列化方式为StringRedisSerializer。绝大多数情况下,不推荐使用 JdkSerializationRedisSerializer 进行序列化,主要是不方便人工排查数据。所以我们需要切换序列化方式。server: port: 8083 spring: application: name: springboot-redis redis: # Redis服务器地址 host: localhost # Redis服务器连接端口 port: 6379 # Redis服务器连接密码(默认为空) password:

推荐学习
  • “68道 Redis 168道 MySQL”精品面试题(带解析),你背废了吗?
  • 二本渣渣被炒,18天脱产学飞SpringBoot,逆袭腾讯涨薪18K!

springboot中redis的使用详解(SpringBoot整合Redis)(1)

前言

这篇博文我们介绍SpringBoot如何整合Redis来访问非关系型数据库,带你深入了解Redis的自动原理,并结合具体案例进行实操,分享所有的源码。

01 为什么选择Spring Data Redis?

Spring Data redis是Spring Data家族中最重要的一分子,它提供了从Spring应用程序轻松配置并访问Redis的功能。它提供了用于与存储交互的低级和高级抽象,使用户摆脱了对基础设施的担忧。

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

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

springboot中redis的使用详解(SpringBoot整合Redis)(2)

02 Spring Boot整合Redis2.1 导入依赖项

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

自动引入的依赖,如图所示:

springboot中redis的使用详解(SpringBoot整合Redis)(3)

2.2 自动配置原理

自动配置类RedisAutoConfiguration

springboot中redis的使用详解(SpringBoot整合Redis)(4)

  • RedisProperties属性类,用于对Redis的基本属性配置
  • LettuceConnectionConfiguration、JedisConnectionConfiguration,Redis的客户端类型,其中配置了连接工厂,连接池等,默认为Lettuce,底层引入了Lettuce客户端jar包
  • 自动注入了RedisTemplate**<Object **Object> : xxxTemplate;自动注入了StringRedisTemplate;k:v都是String

底层只要我们使用StringRedisTemplate、RedisTemplate就可以操作redis

2.3 默认整合Lettuce2.3.1 添加配置

server: port: 8083 spring: application: name: springboot-redis redis: # Redis服务器地址 host: localhost # Redis服务器连接端口 port: 6379 # Redis服务器连接密码(默认为空) password: # Redis数据库索引(默认为0) database: 0 # 连接超时时间(毫秒) timeout : 300 client-type: lettuce #切换jedis客户端,改成jedis lettuce: #切换jedis客户端,改成jedis pool: # 连接池最大连接数(使用负值表示没有限制) max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1 # 连接池中的最大空闲连接 max-idle: 8 # 连接池中的最小空闲连接 min-idle: 02.4 切换至Jedis2.4.1 导入jar

<!--导入jedis--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>

注意:配置基本同上,只需要将lettuce换成jedis即可。

2.5 配置序列化方式

RedisTemplate默认的序列化方式为JDKSerializationRedisSerializer,会把对象序列化存储到Redis中(二进制形式),StringRedisTemplate的默认序列化方式为StringRedisSerializer。绝大多数情况下,不推荐使用 JdkSerializationRedisSerializer 进行序列化,主要是不方便人工排查数据。所以我们需要切换序列化方式。

Spring Data底层为我们实现了七种不同的序列化方式,大家可以根据需要进行选择,如下图所示:

springboot中redis的使用详解(SpringBoot整合Redis)(5)

我们以Jackson2JsonRedisSerializer为例,展示如何切换序列化方式。

@Configuration public class RedisConfig { /** * 默认是JDK的序列化策略,这里配置redisTemplate采用的是Jackson2JsonRedisSerializer的序列化策略 * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<String Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){ //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); RedisTemplate<String Object> redisTemplate = new RedisTemplate<>(); // 配置连接工厂 redisTemplate.setConnectionFactory(redisConnectionFactory); //使用StringRedisSerializer来序列化和反序列化redis的key值 //redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setKeySerializer(jackson2JsonRedisSerializer); // 值采用json序列化 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } /*** * stringRedisTemplate默认采用的是String的序列化策略 * @param redisConnectionFactory * @return */ @Bean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory){ StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); stringRedisTemplate.setConnectionFactory(redisConnectionFactory); return stringRedisTemplate; } }03 代码示例

我为广大粉丝朋友提供了详细使用案例,以便更好地学习Redis。只展示其中一部分的代码,更加详细的代码,大家可以通过源码地址来查看。

@SpringBootTest public class RedisApplicationTests { @Autowired private RedisTemplate redisTemplate; @Autowired private StringRedisTemplate stringRedisTemplate; @Test void testRedis(){ ValueOperations<String String> operations = redisTemplate.opsForValue(); operations.set("hello" "world"); String hello = operations.get("hello"); System.out.println(hello); } /** * 操作字符串 */ @Test public void testString() { //设置值 stringRedisTemplate.opsForValue().set("String" "Mao"); //获取值 String string = stringRedisTemplate.opsForValue().get("String"); System.out.println(string); //设置值且设置超时时间 stringRedisTemplate.opsForValue().set("Middle" "Yu" 3 TimeUnit.MINUTES); String middle = stringRedisTemplate.opsForValue().get("Middle"); System.out.println(middle); //删除数据 Boolean isDelete = stringRedisTemplate.delete("String"); Assert.isTrue(isDelete "删除失败"); } /** * 操作列表 */ @Test public void testList() { ListOperations listOp = redisTemplate.opsForList(); //往 List 左侧插入一个元素 listOp.leftPush("nameList" "mike"); listOp.leftPush("nameList" "kim"); //往 List 右侧插入一个元素 listOp.rightPush("nameList" "jimmy"); listOp.rightPush("nameList" "chuck"); //List 大小 Long size = listOp.size("nameList"); //遍历整个List List nameList1 = listOp.range("nameList" 0 size); System.out.println(JSON.toJSONString(nameList1)); //遍历整个List,-1表示倒数第一个即最后一个 List nameList = listOp.range("nameList" 0 -1); System.out.println(JSON.toJSONString(nameList)); //从 List 左侧取出第一个元素,并移除 Object name1 = listOp.leftPop("nameList" 200 TimeUnit.MILLISECONDS); System.out.println("is kim:" name1.equals("kim")); //从 List 右侧取出第一个元素,并移除 Object name2 = listOp.rightPop("nameList"); System.out.println("is chuck:" name2.equals("chuck")); } 。。。。。。开源项目中还有内容哦。。。。。。 }

本文示例读者可以通过查看下面仓库中的项目,如下所示:

<module>springboot-redis</module>

  • CodeChina: https://codechina.csdn.net/jiuqiyuliang/springboot-learning

作者:程序猿小亮

原文链接:https://blog.csdn.net/jiuqiyuliang/article/details/118677483?spm=1001.2014.3001.5502

猜您喜欢: