暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis客户端——Redisson介绍

北银金科逐浪青春 2020-09-29
1183

Redis 是目前使用最广泛的内存数据库,在SpringBoot 项目中可以便捷的使用spring-data-redis-starter 来集成Redis客户端,而spring-data-redis-starter中使用的默认客户端是Lettuce,而我今天要为大家介绍另外一款好用的客户端——Redisson


Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。



在项目中使用Redisson ,首先要引用依赖:



然后在classpath添加配置文件redisson.yaml



每个Redisson对象实例都会有一个与之对应的Redis数据实例,可以通过调用getName方法来取得Redis数据实例的名称(key)。



所有与Redis key相关的操作都归纳在RKeys这个接口里:



通用对象桶(Object Bucket) Redisson的分布式RBucketJava对象是一种通用对象桶可以用来存放任类型的对象。除了同步接口外,还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。



还可以通过RBuckets接口实现批量操作多个RBucket对象:



映射(Map) 基于Redis的Redisson的分布式映射结构的RMap Java对象实现了java.util.concurrent.ConcurrentMap接口和java.util.Map接口。与HashMap不同的是,RMap保持了元素的插入顺序。该对象的最大容量受Redis限制,最大元素数量是4 294 967 295个。除了同步接口外,还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。如果你想用Redis Map来保存你的POJO的话,可以考虑使用分布式实时对象(Live Object)服务。在特定的场景下,映射缓存(Map)上的高度频繁的读取操作,使网络通信都被视为瓶颈时,可以使用Redisson提供的带有本地缓存功能的映射。



映射的字段锁的用法:



集(Set) 基于Redis的Redisson的分布式Set结构的RSet Java对象实现了java.util.Set接口。通过元素的相互状态比较保证了每个元素的唯一性。该对象的最大容量受Redis限制,最大元素数量是4 294 967 295个。



有序集(SortedSet) 基于Redis的Redisson的分布式RSortedSet Java对象实现了java.util.SortedSet接口。在保证元素唯一性的前提下,通过比较器(Comparator)接口实现了对元素的排序。



列表(List) 基于Redis的Redisson分布式列表(List)结构的RList Java对象在实现了java.util.List接口的同时,确保了元素插入时的顺序。该对象的最大容量受Redis限制,最大元素数量是4 294 967 295个。



队列(Queue) 基于Redis的Redisson分布式无界队列(Queue)结构的RQueue Java对象实现了java.util.Queue接口。尽管RQueue对象无初始大小(边界)限制,但对象的最大容量受Redis限制,最大元素数量是4 294 967 295个。



双端队列(Deque) 基于Redis的Redisson分布式无界双端队列(Deque)结构的RDeque Java对象实现了java.util.Deque接口。尽管RDeque对象无初始大小(边界)限制,但对象的最大容量受Redis限制,最大元素数量是4 294 967 295个。



可重入锁(Reentrant Lock) 基于Redis的Redisson分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口。同时还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。



大家都知道,如果负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。


另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。



可重入锁是使用最频繁的锁,除了可重入锁,Redisson还实现了:


1. 公平锁(Fair Lock)



2. 联锁(MultiLock)



3. 红锁(RedLock)



4. 读写锁(ReadWriteLock)



5. 信号量(Semaphore)



6. 可过期性信号量(PermitExpirableSemaphore)



7. 闭锁(CountDownLatch)



Redisson 还提供了与其他框架集成的方案:


· Spring框架整合

· Spring Cache整合

· Hibernet整合

· Tomcat会话管理器

· Spring会话管理器

· Spring事务管理器

· Spring Data Redis

· Spring Boot Starter


总之,Redison是一个非常优秀的Redis客户端工具,非常值得在项目中使用,此外,该项目的作者mrniko——Nikita Koksharov 也是另外一个知名项目netty-socketio 的作者,在即时通信领域,这两个项目可以紧密关联,实现消息跨服务器的推送,推荐大家使用。


作者介绍

孙磊,2012年毕业于烟台大学,现任职于北银金融科技有限责任公司银行转型业务开发部。主要擅长即时通信及企业上云,目前主要研究方向为云原生。




招聘启事


北银金融科技有限责任公司根植于北京银行,是一家致力于大数据、人工智能、云计算、区块链、物联网等新技术创新与金融科技应用的科技企业,公司充分发挥北京银行企业文化和技术积淀先天优势,通过对技术、场景、生态的完美融合,输出科技创新产品和技术服务。


现诚邀优秀人才加盟,

共享金融科技时代硕果


扫描此二维码

期待您的加入




文章转载自北银金科逐浪青春,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论