专栏/SpringBoot集成Redis(九)

SpringBoot集成Redis(九)

2021年11月28日 01:54--浏览 · --喜欢 · --评论
粉丝:848文章:135

上一篇文章介绍了如何使用Jedis来操作redis数据库,这篇文章介绍一下SpringBoot如何集成Redis。

一、集成介绍

SpringBoot框架中已经包含了redis的客户端依赖,SpringBoot不同版本采用不同的redis客户端,如下所示:

  • 在SpringBoot 1.x的版本中,默认采用的是Jedis作为redis客户端。

  • 在SpringBoot 2.x的版本中,默认采用的是lettuce作为redis客户端。

(1)Jedis和Lettuce区别

  • Jedis和Lettuce都是Redis Client。

  • Jedis是直连模式,在多个线程间共享一个Jedis 实例时是线程不安全的。如果想要在多线程环境下使用 Jedis,需要使用连接池。每个线程都去拿自己的 Jedis 实例,当连接数量增多时,物理连接成本就较高了。

  • Lettuce的连接是基于Netty的,连接实例可以在多个线程间共享。所以,一个多线程的应用可以使用同一个连接实例,而不用担心并发线程的数量。

  • Lettuce是基于netty 的,netty是一个多线程、事件驱动的 I/O 框架。所以 Lettuce 可以帮助我们充分利用异步的优势。

二、具体步骤

(1)创建SpringBoot工程

创建一个maven工程,然后添加SpringBoot父工程依赖。

(2)添加redis依赖

添加web模块、redis以及commons连接池依赖。

(3)添加application.yml配置文件

在工程【src/main/resources】目录下,创建【application.yml】或者【application.properties】配置文件。

properties配置

yml配置

到这里,SpringBoot集成Redis已经成功了,下面进行代码测试。

(4)redisTemplate测试

SpringBoot集成Redis后,会自动将Redis实例注入到redisTemplate对象,我们只要在相应的service中自动注入redisTemplate实例即可操作redis数据库。

创建【TestController】测试类,具体代码如下所示:

启动工程,打开浏览器,访问【/api/redis/test01】测试url,然后查看结果。

虽然上面的结果可以看到返回的结果,但是从redis服务中查看,可以发现,redis数据库中存储的内容是如下所示:

上面看着有点像乱码,出现这种情况的原因是:springboot中redis的序列化方式问题导致

三、redis序列化方式

RedisTemplate通过RedisSerializer接口进行序列化,RedisSerializer接口有7种实现类,其中默认采用的是【JdkSerializationRedisSerializer】序列化方式,分别如下图所示:

使用JDK的序列化方式,就会导致出现上面类似乱码的key或者value【这里我也还没有理解为什么采用JDK的方式序列化就会出现乱码的原因,如果有知道的请指教】。

解决方案:自定义key或value的序列化方式

(1)创建RedisConfig配置类

在配置类RedisConfig中设置key和value的序列化方式,这里key采用【StringRedisSerializer】字符串序列化方式,value采用【Jackson2JsonRedisSerializer】json序列化方式。

(2)工程测试

启动工程,再次方式测试方法,查看redis服务中key内容。

此时可以正常显示key和value的内容,以上就是SpringBoot集成Redis的步骤。

欢迎关注公众号:【zhuyoubin】。

投诉或建议