springboot1 对redis的连接默认采用jedis。在springboot2之后,默认采用lettuce。这一点也说明了lettuce与jedis的优劣。
概念
Jedis:是老牌的 Redis 的Java 实现客户端,提供了比较全面的 Redis 命令的支持,
Redisson:实现了分布式和可扩展的Java 数据结构。
Lettuce:高级 Redis 客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器
优点:
Jedis:比较全面的提供了 Redis的操作特性
Redisson:促使使用者对 Redist 的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集台,可通过 Redis 支持延退队列
Lettuce:基于 Netty 框架的事件驱动的通信层,其方法调用是异步的。Lettuce 的 API 是程安全的,所以可以操作单个 Lettuce 连接来完成各种操作
总结:
优先使用 Lettuce,如果需要分布式锁,分布式集合等分布式的高级特性,添加 Redisson 结合使用,因为 Redisson 本身对字符串的操作支持很差。
在一些高并发的场景中,比如秒杀,抢票,抢购这些场景,都存在对核心资源,商品库存的争,控制不好,库存数量可能被减少到负数,出现超卖的情況,或者产生唯一的一个递增 ID,由于 web 应用部在多个机器上,简单的同步 加锁是无法实现的,给数据库加锁的话,对于高并发,1000/5的并发,数据库可能由行锁变成表锁,性能下降会历害。那相对而言,redis 的分布式锁,相对而言,是个很好的选择,redis官方推荐使用的 Redisson 就提供了分布式锁和相关服务。
在官方网站列一些java客户端, 有: Jedis/Redisson/redis/JDBC.Reds 等,其中官方推荐使用 redis 和 Redisson。常用 edis。
参考