
【进阶篇】Redis实战之Redisson使用技巧详解,干活!
一、摘要
什么是 Redisson?来自于官网上的描述内容如下!
Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格客户端(In-Memory Data Grid)。它不仅提供了一系列的 redis 常用数据结构命令服务,还提供了许多分布式服务,例如分布式锁、分布式对象、分布式集合、分布式远程服务、分布式调度任务服务等等。
相比于 Jedis、Lettuce 等基于 redis 命令封装的客户端,Redisson 提供的功能更加高端和抽象,逼格高!
更多功能特性和开发文档说明,可用移步github
进行获取,访问地址如下:
接下来,我们就一起来聊一下,如何使用 Redisson 操作 Redis 中的字符串、哈希、列表、集合、有序集合,以及布隆过滤器和分布式锁等功能。
二、Redisson
2.1、基本使用
跟过去一样,首先创建一个 maven 项目,添加Redisson
依赖包。
单机环境下,简单样例如下!
ps:创建 RedissonClient 对象实例的方式多钟多样,可以直接通过在代码中设置 Redis 服务的相关参数创建,也可以通过加载 JSON 格式、 YAML 格式或者 Spring XML 配置文件来创建,详细的参数配置可用移步上文提到的 Redisson 开发文档。
2.2、字符串操作
Redisson 支持通过RBucket
对象来操作字符串数据结构,通过RBucket
实例可以设置value
或设置value
和有效期,简单样例如下!
2.3、对象操作
Redisson 支持将对象作为value
存入redis
,被存储的对象事先必须要实现序列化接口Serializable
,否则会报错,简单样例如下!
2.4、哈希操作
Redisson 支持通过RMap
对象来操作哈希数据结构,简单样例如下!
2.5、列表操作
Redisson 支持通过RList
对象来操作列表数据结构,简单样例如下!
2.6、集合操作
Redisson 支持通过RSet
对象来操作集合数据结构,简单样例如下!
2.6、有序集合操作
Redisson 支持通过RSortedSet
对象来操作有序集合数据结构,在使用对象来存储之前,实体对象必须先实现Comparable
接口,并重写比较逻辑,否则会报错,简单样例如下!
2.7、布隆过滤器
布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。
布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
Redisson 支持通过RBloomFilter
对象来操作布隆过滤器,简单样例如下!
2.8、分布式自增ID
ID 是数据的唯一标识,传统的做法是利用 UUID 和数据库的自增 ID。
但由于 UUID 是无序的,不能附带一些其他信息,因此实际作用有限。
随着业务的发展,数据量会越来越大,需要对数据进行分表,甚至分库。分表后每个表的数据会按自己的节奏来自增,这样会造成 ID 冲突,因此这时就需要一个单独的机制来负责生成唯一 ID,redis 原生支持生成全局唯一的 ID。
简单样例如下!
2.9、分布式锁
Redisson 最大的亮点,也是使用最多的功能,就是提供了强大的分布式锁实现,特点是:使用简单、安全!
简单使用样例如下!
以上是单机环境下的分布式锁实现逻辑,如果是集群环境下,应该如何处理呢?
Redisson 提供RedissonRedLock
操作类,也被称为红锁,实现原理简单的总结有以下几点:
- 1.如果有多个 redis 集群的时候,当且仅当从大多数(N/2+1,比如有3个 redis 节点,那么至少有2个节点)的 Redis 节点都取到锁,并且获取锁使用的总耗时小于锁失效时间时,锁才算获取成功
- 2.如果获取失败,客户端会在所有的 Redis 实例上进行解锁操作
- 3.集群环境下,redis 服务器直接不存在任何复制或者其他隐含的分布式协调机制,否则会存在实效的可能
RedissonRedLock
简单使用样例如下!
更加详细的分布式锁实现原理分析,可以移步到这个地址查阅。
2.10、集群模式
以上介绍的都是单机模式,如果是集群环境,我们可以采用如下方式进行配置:
2.11、哨兵模式
哨兵模式,参数配置方式如下:
2.12、主从模式
主从模式,参数配置方式如下:
三、小结
在前几篇文章中,我们详细的介绍了 Jedis、Lettuce,我们不禁会发出一个疑问:Redisson和Jedis、Lettuce有什么区别?
现在我们再回头来总结一番!
- Jedis:Redis 官方推出的用于通过 Java 连接 Redis 客户端的一个工具包,它提供了全面的类似于 Redis 原生命令的支持,是目前使用最广的一款 java 客户端。
- Lettuce:一个可扩展的线程安全的 Redis 客户端,通讯框架基于 Netty 开发,支持高级的 Redis 特性,比如哨兵,集群,管道,自动重新连接等特性。从 Spring Boot 2.x 开始, Lettuce 已取代 Jedis 成为首选 Redis 的客户端。
- Redisson:一款架设在 Redis 基础上,通讯基于 Netty 的综合的、新型的中间件,是企业级开发中使用 Redis 的最佳范本。
总结下来,Jedis 把 Redis 命令封装的非常全面,Lettuce 则进一步丰富了 Api,支持 Redis 各种高级特性。
但是两者并没有进一步深化,只给了你操作 Redis 数据库的工具,而 Redisson 则是基于 Redis、Lua 和 Netty 建立起了一套的分布式解决方案,比如分布式锁的实现,分布式对象的操作等等。
在实际使用过程中,Lettuce
+ Redisson
组合使用的比较多,两者相铺相成。
关于分布式锁实现的应用,生产环境推荐尽量采用单点环境来实现,基本上解决绝大部分的分布式锁问题,如果当前服务的环境确实很复杂,可以采用RedissonRedLock
来实现。
四、参考
1、Redisson 开发文档
2、王同学 - 聊一聊Redis官方置顶推荐的Java客户端Redisson
3、Venlenter - Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)
文章转载自公众号:Java极客技术
