1. 什么是Redisson
Redisson官网的介绍如下:
Redis Java Client with features of In-Memory Data Grid
Redisson是一款具有诸多高性能功能的综合类开源中间件。
Redisson设计的初衷是让实施者对Redis的关注进行分离,可以将更多的精力放在处理业务逻辑上。
Redisson提供的功能特性及其在项目中所起的作用远大于原生Redis所提供的各种功能。
2. Redisson的功能特性
(1)多种连接方式
同步,异步,异步流,管道流
(2)数据序列化
多种数据序列化方式
(3)集合数据分片
在集群模式下,Redisson为单个Redis集合类型提(eg: Set, Map)供了自动分片功能。
单个集合被拆分后,均匀地分布在整个集群里,而不是挤在单一的一个节点里。
(4)分布式对象
Object Bucket(通用对象桶), Binary Stream(二进制流), Geospatial Bucket(地理空间对象), AtomicLong, AtomicDouble, Bloom Filter(布隆过滤器) …
(5)分布式集合
Map, Multimap, Set, SortedSet, List, Queue, 双端,堵塞,延迟队列 …
(6)分布式锁
Reentrant Lock(可重入锁), Fair Lock(公平锁), ReadWrite Lock(读写锁), CountDownLatch(闭锁), Semaphore(信号量) …
(7)分布式服务
Remote Service(分布式远程服务), Scheduler Service(分布式调度任务服务), MapReduce, Executor Service …
3.Redisson的一些典型应用场景
(1) 布隆过滤器(Bloom Filter)与去重
布隆过滤器用来过滤已经存在的元素。保证集合中的元素是唯一的,即去重。
也许有人会说,去重不是很简单。只要判断元素是否存在就好了。
是的,此话没错。
但是传统的判断元素是否存在例如contains()方法是基于单机内存模式的,这在高并发大数据量的场景下,是不合适的。
为此,Redisson提供了高性能的数据组件Bloom Filter。
布隆过滤器的优缺点
优点:
不需要开辟额外的内存来存储元素,节省了存储空间。
缺点:
由于是采用哈希和下标算法,存在一定的误判率。
多个元素共享下标,元素无法进行删除操作,存在误删的情况。
(2)消息通信
Redisson也可以实现类似于消息中间件(RabbitMQ)所提供的消息队列功能,从而实现业务服务模块的异步通信与解耦。
Redisson分布式对象中有一个组件叫做“基于发布订阅模式的主题”,该组件可以实现消息通信的功能。
生产者发布主题,消费者只需要订阅响应的主题即可实现自动监听消费主题和消息,从而执行响应的业务逻辑。
生产者–>发布主题
消费者–>监听接收消息–>执行业务逻辑
(3)延迟队列
所谓延迟队列,是指生产者将消息发送至队列之后,并不会立即被消费者监听消费,而是等待一定的过期时间(存活时间)TTL,当TTL时间一到,消息才会被真正地监听消费。
Redisson采用阻塞队列的方式来进行消息的暂存,缓冲作用,从而起到消息的延迟。
(4)分布式锁
分布式锁是用于控制高并发场景下多线程对共享资源的并发访问。
实现分布式锁有3中方式:
a. 基于数据库级别的乐观锁,悲观锁实现
b. 基于Redis的原子操作实现
c. 基于ZooKeeper的临时顺序节点和Watcher机制实现
以上3中方式各有优缺点。
另外的一种高性能且操作更为便捷的方式为基于Redisson的分布式锁。
Redisson实现的分布式锁弥补了Redis的原子操作实现分布式锁的缺陷。
Redis实现分布式锁的缺陷:
a. 需要设置过期时间TTL,设置不当容易影响性能
b. 采用原子操作SETNX获取分布式锁时,不具备可冲入的特性。获取锁失败的线程将永远失败下去
c. 如果Redis的服务节点放生宕机,Key没有及时释放导致死锁
Redisson提供了多种锁供开发者选择:
可重入锁,一次性锁,联锁,红锁,读写锁 等