SpringBoot2集成redis,使用lettuce客户端

Springboot集成redis大家都会用,主要就是使用RedisTemplate类来进行各种操作。可能很多人并没有注意,在Springboot2以后,底层访问redis已经不再是jedis了,而是lettuce。

至于jedis和lettuce有什么区别呢,对我们的使用有什么影响呢?

jedis采用的是直连redis server,在多个线程之间共用一个jedis实例时,是线程不安全的。如果想避免线程不安全,可以使用连接池pool,这样每个线程单独使用一个jedis实例。由此带来的问题时,如果线程数过多,带来redis server的负载加大。有点类似于BIO的模式。

lettuce采用netty连接redis server,实例可以在多个线程间共享,不存在线程不安全的情况,这样可以减少线程数量。当然,在特殊情况下,lettuce也可以使用多个实例。有点类似于NIO的模式。

在配置使用时,其实对我们影响很小。

在Springboot1.x时,我们配置redis是这样的:

SpringBoot2集成redis,使用lettuce客户端_第1张图片

那么现在使用了lettuce的情况下:

SpringBoot2集成redis,使用lettuce客户端_第2张图片

如果你感觉并不需要这个pool,把pool的配置给去掉就行了:

SpringBoot2集成redis,使用lettuce客户端_第3张图片

此时需要一个注意的地方,如果你配置了这个pool,那么必须在pom.xml添加上commons-pool2的依赖。没配置pool的话,可以不引用。

SpringBoot2集成redis,使用lettuce客户端_第4张图片

如果要在代码中使用RedisTemplate,那么配完上面的就已经可以用了,不过RedisTemplate默认只能支持RedisTemplate形式的,也就是key-value只能是字符串,不能是其他对象。这在我的使用中,已经满足需求了,我都是将需要存入redis的对象变成json字符串存入。

如果你想存入其他类型的数据,就需要如下图,自己定义一个RedisTemplate对象,返回一个自己想要的RedisTemplate对象,自己定义序列化方式。下图可以看到那个factory就是LettuceConnectionFactory。

SpringBoot2集成redis,使用lettuce客户端_第5张图片

 

 

你可能感兴趣的:(spring,boot,redis,Spring,boot相关实战知识的专栏)