Jedis与Redisson
1、Jedis技术特点
比较全面支持redis命令,包括redis 2.8.x and 3.x.x.
支持Redis cluster
支持sentinel哨兵模式
使用阻塞的I/O,同步调用
不支持异步
不是线程安全的
All of the following redis features are supported:
- Sorting
- Connection handling
- Commands operating on any kind of values
- Commands operating on string values
- Commands operating on hashes
- Commands operating on lists
- Commands operating on sets
- Commands operating on sorted sets
- Transactions
- Pipelining
- Publish/Subscribe
- Persistence control commands
- Remote server control commands
- Connection pooling
- Sharding (MD5, MurmurHash)
- Key-tags for sharding
- Sharding with pipelining
- Scripting with pipelining
- Redis Cluster
2、Redisson技术特点
它有两个版本:Open-source edition和PRO edition, 它的主要技术特点就是数据网格(In-Memory Data Grid),它支持的集群模式有:Redis Cluster、Sentinel哨兵模式、Master / Slave、Single单节点。下面给出 Pro 版本和开源版本的功能对比。
Redisson官方文档提供了一个RedissonPro和Jedis的性能对比:https://dzone.com/articles/redisson-pro-vs-jedis-which-is-faster
当redis 命令并发超过8(很容易的事情)时,Redisson吞吐量>Jedis吞吐量,但是 Redisson执行时间<Jedis执行时间。
另外,Redisson在基于NIO的Netty框架上异步操作。它的API是线程安全的。
RedissonPro针对大容量的Map和Set实现自动分片的功能,把一个大集合分割成几个小的集合,然后将他们分布在Redis集群里。好处在于整个操作对用户透明,同时增加该集合的吞吐量。
RedissonPro具有高速引擎,在高并发的情况下,专业版较开源版性能提升8倍,其中4倍吞吐量和两倍的响应速度。
3、应用场景分析
3.1、热点数据缓存
对于不经常变化的热点数据,两种方式都没有问题,但也要从几个方面考虑:
- 数据量大小。其实20万的数据已经挺大了,但是也就20M左右,所以除非要缓存的数据超过100M,优先选择Jedis。
- 聚合计算比较多。把数据放到列表或者集合中,然后做数据精确查找,或者简单的模糊查询,比如根据IP找城市或者根据姓名模糊查询通信录等。Redisson可能更方便点,因为这些查找或计算一般都在应用程序里面执行,所以相对而言 Redisson使用更加方便。
- 数据增长比较快。需要增量添加到redis中,同时还有很多查询,优先使用Redisson。
- 需要使用本地缓存。Jedis 不支持本地缓存,优先使用Redisson。
3.2、账户资金缓存
对资金数据的操作,必须使用同步的,一般使用incr做加减,这时必须使用Jedis。必须要时对单个账号使用分布式锁。Redisson是异步的不适合对资金的操作。
3.3、网络统计数据
网络统计数据主要是用来分析,要执行简单的聚合计算或者检索,且数据量一般都比较大,我个人认为使用Redisson是合理的。
3.4、分布式锁
Redisson有成熟的分布式锁实现方式,并且提供了多种分布式锁实现方式。基于Jedis也可以也实现简单的互斥锁,但是要使用SETNX命令,并注意锁的粒度。Redisson实现了基于Redis集群的RedLock 分布式锁算法。不过这里有一篇反驳这个算法的文章:http://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html,在使用的时候可以参考下。
3.5、统计分析
对于一些专业的统计数据分析,需要使用复杂的计算公式,比如天气预报算法等,需要存储中间结果或需要提前加载大量基础数据,这时适合使用Redisson。但是对于hyperloglog基数计算,还是要使用Jedis。
3.6、搜索功能
Redis 中集合可以用来实现简单搜索的功能,可以使用集合以及有序集合的交集、并集和差集操作查找符合指定要求的元素。这种应用场景还是使用Jedis。
3.7、分布式Session
Spring session 就是用Jedis 吧,完全不用考虑Redisson。
3.8、需要本地缓存
Redisson专业版是支持本地缓存,它在Redis的基础上了做了扩展,不过Redis 6 很快也会支持本地缓存。