文章插图
写这篇的时候,相信有很多朋友还在用Jedis作为redis的客户端,我不禁有很多问号,Jedis还香吗?如果你早些年说它香我信,但是都2020年了,它真的不那么香了 。那为什么还继续使用它呢?大部分原因或多或少是因为一遗留代码没人敢大动,就这样吧;二新项目没人主导使用其它实现做替换 。祖传代码不轻易大动,这个真理必须相信,且坚持相信;至于没人主导拍板做技术替换,可能是习惯了Jedis的用法,也可能是没人了解其它技术实现,当然还有其它原因,有兴趣分享的朋友可以在评论区聊一聊 。咳咳,扯远了,来聊我们今天的话题-Redisson实战用法 。
在Redis的官网(https://redis.io/clients#JAVA)上可以看到Java语言的推荐客户端列表,除了我们都熟知的Jedis之外,Redisson也是官方推荐的客户端 。从这我们了解到Redisson是一个Redis客户端,那它到底Redisson是什么呢?Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid),它充分利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类,让使用Redis更加简单、便捷,从而让使用者能够将更多精力集中到业务逻辑处理上 。
也就是说Redisson不仅仅是一个Redis客户端,它还实现了很多具有分布式特性的常用工具类,例如分布式锁、布隆过滤器等,更多功能特性请移步https://redisson.org/ 。接下来,我们一起聊一下Redisson中如何轻松操作Redis中的字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets),以及如何使用Redisson实现的布隆过滤器和分布式锁,最后分析一下Redisson中分布式锁的解决方案¬ 。
创建RedissonClient要使用Redisson,首先要创建RedissonClient对象实例 。创建RedissonClient对象实例的方式多种多样,可以直接通过在代码中设置Redis服务的相关参数创建,也可以通过加载JSON格式或YAML格式配置文件创建,还可以通过在Spring XML文件中使用Redisson标签配置创建,具体如何创建RedissonClient对象实例可根据需要选择,这里就不一一介绍了,有想法的可以移步Redission官网 。本文为了展示使用样例代码,使用了最简单的方式:在代码中设置单机Redis服务的相关参数创建RedissonClient对象实例,具体代码如下 。
Config config = new Config();// 使用单机Redis服务config.useSingleServer().setAddress("redis://127.0.0.1:6379");// 创建Redisson客户端RedissonClient redisson = Redisson.create(config);
字符串(strings)Redisson将Redis中的字符串数据结构封装成了RBucket,通过RedissonClient的getBucket(key)方法获取一个RBucket对象实例,通过这个实例可以设置value或设置value和有效期,例如如下代码 。RBucket<String> nameRBucket =redisson.getBucket("name");// 只设置value,key不过期nameRBucket.set("四哥");// 设置value和key的有效期nameRBucket.set("四哥", 30, TimeUnit.SECONDS);// 通过key获取valueredisson.getBucket("name").get();
有朋友可能发现了,上面的nameRBucket使用了String约定了value类型,也就是说这里的value可以是其它类型,例如value是一个对象,可以这么操作 。Student tom = new Student();tom.setId(456L);tom.setChineseName("刘能");tom.setEnglishName("tom");tom.setAge(52);// 通过key获取RBucket对象实例RBucket<Student> studentRBucket = redisson.getBucket("student");// 设置value和有效期studentRBucket.set(tom, 300, TimeUnit.SECONDS);// 通过key获取valueredisson.getBucket("student").get();
哈希(hashes)Redisson将Redis中的字符串数据结构封装成了RMap,操作示例代码如下 。// 通过key获取RMapRMap<String, String> studentRMap = redisson.getMap("studentMap");// 设置map中key-valuestudentRMap.put("id", "123");studentRMap.put("name", "赵四");studentRMap.put("age", "50");// 设置key有效期studentRMap.expire(300, TimeUnit.SECONDS);// 通过key获取valueredisson.getMap("studentMap").get("name");
列表(lists)使用示例代码如下 。【聊一聊Redis官方置顶推荐的Java客户端Redisson】
RList<Student> studentRList = redisson.getList("studentList");studentRList.add(jack);// 设置有效期studentRList.expire(300, TimeUnit.SECONDS);// 通过key获取valueredisson.getList("studentList").get(0);
集合(sets)使用示例代码如下 。RSet<Student> studentRSet = redisson.getSet("studentSet");studentRSet.add(jack);studentRSet.add(tom);// 设置有效期studentRSet.expire(300, TimeUnit.SECONDS);// 通过key获取valueredisson.getSet("studentSet");
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 前端杂谈:浅聊GMS
- 如何恢复微信聊天记录?简单几步,轻松搞定 快速恢复微信聊天记录
- 网线也有高低?聊聊网线的差别
- 国人开源了一款超好用的 Redis 客户端,真香
- 这可能是目前最好看的Redis可视化管理客户端了
- 浅谈ARP地址解析协议
- Redis源码剖析之SDS
- 手写Redis分布式锁
- 知其然更要知其所以然,聊聊SQLite软件架构
- RediSearch 2.0 GA 发布,高性能全文搜索引擎