文章目录

  • 一、Redisson是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.Redisson 配置
    • 2.增(改)
    • 3.删
    • 4.查
    • 5.测试类
  • 三、遇到错误
  • 总结
  • 参考资料

一、Redisson是什么?

Redisson——具有内存数据网格功能的Redis Java 客户端
基于高性能异步无锁Java Redis客户端和Netty框架。
JDK 兼容性:1.8 - 16,Android

二、使用步骤

1.引入库

  • maven
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.0</version>
</dependency>

2.Redisson 配置

        Config config = new Config();//设置编解码器(默认FST)config.setCodec(new JsonJacksonCodec());//模式设置(单例)config.useSingleServer().setAddress("redis://You redis IP: Port").setPassword("password").setDatabase(Database);RedissonClient redisson = Redisson.create(config);
  • 编/解码器详情(数据序列化)

2.增(改)

  • Redis命令和Redisson对象匹配列表
  • Redis命令
public static void addData(RedissonClient redissonClient, DataType Type){switch (Type){case String:RBucket<String> rBucket = redissonClient.getBucket("fud:test:meng:String");rBucket.set("MengTest");break;case Hash:RMap<String, Object> rMap = redissonClient.getMap("fud:test:meng:map");HashMap<String,String> DataMap   = new HashMap<>();DataMap.put("Test1","1");DataMap.put("Test2","2");DataMap.put("Test3","3");DataMap.put("Test4","4");rMap.putAll(DataMap);break;case List:RList<String> rList = redissonClient.getList("fud:test:meng:list");List<String> List = new ArrayList();List.add("Test1");List.add("Test2");List.add("Test3");List.add("Test4");List.add("Test5");rList.addAll(List);break;case Set:RSet<String> rSet = redissonClient.getSet("fud:test:meng:set");HashSet<String> set = new HashSet<>();set.add("Test1");set.add("Test2");set.add("Test3");set.add("Test4");set.add("Test5");rSet.addAll(set);break;default:break;}}

Redis对应命令

SET fud:test:meng:String "MengTest"HMSET fud:test:meng:map Test1"1" Test12 "Test2"RPUSH fud:test:meng:list "Test1"
RPUSH fud:test:meng:list "Test2"SADD fud:test:meng:set "Test1"
SADD fud:test:meng:set "Test2"

3.删

 public static void DeleteData(RedissonClient redissonClient, String key, DataType Type){switch (Type){case String:redissonClient.getBucket(key).delete();break;case Hash:redissonClient.getKeys().delete(key);break;case Set:redissonClient.getKeys().delete(key);break;case List:redissonClient.getKeys().delete(key);default:break;}}

4.查

   public static void SelectData(RedissonClient redissonClient, String key, DataType Type){switch (Type){case String:RBucket<String> rBucket = redissonClient.getBucket(key);System.out.println(rBucket.get());break;case Hash:RMap<String, Object> rMap = redissonClient.getMap(key);Map<String, Object> Map = rMap.readAllMap();Map.forEach((s,o)->{System.out.println(s+"    "+o);});break;case List:RList<String> rList = redissonClient.getList(key);List<String> list = rList.readAll();list.forEach(System.out::println);break;case Set:RSet<String> rSet = redissonClient.getSet(key);Set<String> set = rSet.readAll();set.forEach((s)->{System.out.println("s = " + s);});break;default:break;}}

5.测试类

   public enum DataType {String,Hash,List,Set,}public static void main(String[] args){Config config = new Config();config.setCodec(new JsonJacksonCodec());config.useSingleServer()// use "rediss://" for SSL connection.setAddress("redis://10.8.1.211:6379").setPassword("211").setDatabase(15);RedissonClient redissonClient = Redisson.create(config);System.out.println("===============写数据开始=================");addData(redissonClient,DataType.String);addData(redissonClient,DataType.Hash);addData(redissonClient,DataType.List);addData(redissonClient,DataType.Set);System.out.println("===============写数据结束=================="+"\n");//读System.out.println("===============读数据开始=================");SelectData(redissonClient,"fud:test:meng:String",DataType.String);SelectData(redissonClient,"fud:test:meng:map",DataType.Hash);SelectData(redissonClient,"fud:test:meng:list",DataType.List);SelectData(redissonClient,"fud:test:meng:set",DataType.Set);System.out.println("===============读数据结束=================="+"\n");//删System.out.println("===============删数据开始=================");DeleteData(redissonClient,"fud:test:meng:String",DataType.String);DeleteData(redissonClient,"fud:test:meng:map",DataType.Hash);DeleteData(redissonClient,"fud:test:meng:list",DataType.List);DeleteData(redissonClient,"fud:test:meng:set",DataType.Set);System.out.println("===============删数据结束=================="+"\n");redissonClient.shutdown();System.out.println("是否关闭"+redissonClient.isShutdown());}

三、遇到错误

完整报错信息

16:55:31.272 [redisson-netty-2-6] ERROR org.redisson.client.handler.CommandDecoder - Unable to decode data. channel: [id: 0x57c050b5, L:/10.8.7.3:63833 - R:/10.8.1.211:6379], reply: ReplayingDecoderByteBuf(ridx=17, widx=17), command: (GET), params: [fud:test:meng:String]
java.io.IOException: java.lang.NullPointerExceptionat org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:247)at org.redisson.codec.FstCodec$1.decode(FstCodec.java:250)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:368)at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:196)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:134)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:104)at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366)at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException: nullat org.nustaq.serialization.FSTObjectInput.readObjectWithHeader(FSTObjectInput.java:357)at org.nustaq.serialization.FSTObjectInput.readObjectInternal(FSTObjectInput.java:331)at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:311)at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:245)... 24 common frames omitted
16:55:31.273 [redisson-netty-2-6] DEBUG org.redisson.command.RedisExecutor - connection released for command (GET) and params [fud:test:meng:String] from slot NodeSource [slot=0, addr=null, redisClient=null, redirect=null, entry=MasterSlaveEntry [masterEntry=[freeSubscribeConnectionsAmount=1, freeSubscribeConnectionsCounter=value:50:queue:0, freeConnectionsAmount=24, freeConnectionsCounter=value:64:queue:0, freezed=false, freezeReason=null, client=[addr=redis://10.8.1.211:6379], nodeType=MASTER, firstFail=0]]] using connection RedisConnection@971981736 [redisClient=[addr=redis://10.8.1.211:6379], channel=[id: 0x57c050b5, L:/10.8.7.3:63833 - R:/10.8.1.211:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@496257e3(failure: java.io.IOException: java.lang.NullPointerException)], command=(GET), params=[fud:test:meng:String], codec=org.redisson.codec.FstCodec]]
16:55:31.274 [redisson-netty-2-6] WARN io.netty.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.codec.DecoderException: java.io.IOException: java.lang.NullPointerExceptionat io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:421)at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: java.lang.NullPointerExceptionat org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:247)at org.redisson.codec.FstCodec$1.decode(FstCodec.java:250)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:368)at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:196)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:134)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:104)at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366)... 17 common frames omitted
Caused by: java.lang.NullPointerException: nullat org.nustaq.serialization.FSTObjectInput.readObjectWithHeader(FSTObjectInput.java:357)at org.nustaq.serialization.FSTObjectInput.readObjectInternal(FSTObjectInput.java:331)at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:311)at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:245)... 24 common frames omitted
Exception in thread "main" org.redisson.client.RedisException: Unexpected exception while processing commandat org.redisson.command.CommandAsyncService.convertException(CommandAsyncService.java:350)at org.redisson.command.CommandAsyncService.get(CommandAsyncService.java:147)at org.redisson.RedissonObject.get(RedissonObject.java:90)at org.redisson.RedissonBucket.get(RedissonBucket.java:104)at com.example.demo.Test.SelectData(Test.java:102)at com.example.demo.Test.main(Test.java:37)
Caused by: java.io.IOException: java.lang.NullPointerExceptionat org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:247)at org.redisson.codec.FstCodec$1.decode(FstCodec.java:250)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:368)at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:196)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:134)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:104)at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366)at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerExceptionat org.nustaq.serialization.FSTObjectInput.readObjectWithHeader(FSTObjectInput.java:357)at org.nustaq.serialization.FSTObjectInput.readObjectInternal(FSTObjectInput.java:331)at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:311)at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:245)... 24 more

重要报错信息

16:55:31.272 [redisson-netty-2-6] ERROR org.redisson.client.handler.CommandDecoder - Unable to decode data. channel: [id: 0x57c050b5, L:/10.8.7.3:63833 - R:/10.8.1.211:6379], reply: ReplayingDecoderByteBuf(ridx=17, widx=17), command: (GET), params: [fud:test:meng:String]

可得知是数据序列化和反序列化的过程出现的问题,可能是 编/解码器 未设置或设置的不同(请看 2.Redisson 配置)


总结

这是Redisson入门学习记录,只是简单的进行了增删改查。更多内容请参考Redisson官网。

参考资料

  • redisson
  • Redisson 使用手册
  • Redis命令

Redisson入门相关推荐

  1. 实战篇--优惠券秒杀

    优惠券秒杀 全局唯一ID 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显 受单表数据量限制 全局ID生成 ...

  2. Redis万字笔记 深入浅出redis

    笔记里有大量图片帮助你快速理解Redis 因为上传图片很麻烦这是无图片版的 想要有图片版的压缩包的可以在这里下载:后端+Redis+Redis笔记+加深记忆-Java文档类资源-CSDN文库 也可以关 ...

  3. 2023年最新黑马程序员Java微服务项目--学成在线

    正式上线Java微服务项目<学成在线> 项目对程序员的重要性 不用播妞多说了吧 更重要的是 这次是完整!实战!企业级!项目! 划重点:全新发布!正式上线! <学成在线>项目以在 ...

  4. Redis实战高并发,由浅入深

    正常高并用Synchronized(this){}进程同步锁就够了,但是他不能解决分布式问题.只适用于单个服务. 分布式锁可以用setnx 将key的值设为value, setnx的作用key不存在, ...

  5. 黑马点评-优惠券秒杀

    目录 全局唯一ID生成 代码实现 ①编写工具类 ②编写测试类 添加优惠券-利用postman发送请求达成添加功能 VoucherOrderController VoucherOrderServiceI ...

  6. 分布式锁-Redisson快速入门

    分布式锁-Redisson快速入门 一.引入依赖 二.配置Redisson客户端 三.使用Redisson的分布式锁 一.引入依赖 <dependency><groupId>o ...

  7. Redisson分布式锁快速入门教程

    清明在家无事,并且因为上海疫情原因只能宅在家里,突然想到之前计划着写一篇Redisson的分布式锁快速入门教程,自己平常在工作中也只能简单会使用,所以文章可能写的比较简单,希望大佬勿喷.此文章也作为个 ...

  8. 《大厂高并发分布式锁从入门到实战》第3讲之Redisson分布式锁

    目录 一.Redisson介绍 二.Redisson中的几种锁 大多数生产环境中,一台redis节点肯定不能满足业务需要,通常会采用多节点redis集群部署,但是redis集群部署条件下可能会产生锁失 ...

  9. SpringBoot入门教程:Redisson分布式锁

    一:简介 Redis是一个单线程的内存服务器.Redisson是redis的一个Java客户端,为使用者提供了一系列具有分布式特性的常用工具类,使得原本作为协调单机多线程并发程序的工具包获得了协调分布 ...

最新文章

  1. Apache Doris在美团外卖数仓中的应用实践
  2. 第11章 PADS功能使用技巧(2)-最全面
  3. 除了iframe还有什么方法加载第三方网页_IE9常见问题的解决方法
  4. SATA硬盘如何使用GHOST
  5. 文巾解题 1433. 检查一个字符串是否可以打破另一个字符串
  6. 【DP优化】【P1430】序列取数
  7. Python中面向对象的讲解(1)
  8. 【ujson】pip安装ujson报错: error:Microsoft Visual C++ 14.0 is required
  9. 无向图的深度优先遍历非递归_【数据结构图(一)】什么是图
  10. LeedCode篇:876. 链表的中间结点
  11. USACO-Section1.4 Wormholes(枚举法)
  12. 分支结构定义java_[Android-Java]2.分支结构-(4-7)
  13. 曼彻斯特解密_【专利解密】捷通科技改良VLC芯片,照明通信两不误
  14. 防御暴力破解SSH攻击
  15. Djunit工作记录
  16. 四叶草efi_Clover Configurator——四叶草配置引导工具
  17. Dubbo之手写RPC框架
  18. Android 照相机
  19. C++趣味编程——身高预测。
  20. 蚌埠住了,让我虎躯一震的代码!

热门文章

  1. 一致性哈希算法 mysql_一致性哈希
  2. 带你认识路由器:路由器的两个平面和三张表
  3. [运算放大器]佛朗哥笔记 - 有源滤波器II - 低通/高通/带通滤波器设计
  4. python卡尔曼滤波 库_干货分享 | 这可能是史上最全的 Python 算法集
  5. Babel配置中的presets、plugins、各个阶段stage的含义
  6. web视频剪辑 在线视频编辑 开发类似:VE视频引擎 美摄sdk VESDK 蓝松短视频SDK 筷子saas剪辑 系统源码
  7. 查看电脑主板生产日期
  8. [coreldraw X4]如何抠图
  9. MySQL的共享锁、排他锁、意向锁
  10. 前端配置反向代理proxyTable