Redisson--------基础入门
一、前言
之前用的Redis,都是用的原生的RedisTempale或者是StringRedisTemplate,各种API非常的难易记忆
,每次用的时候还得去网上查询API文档,而Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。这里放上redisson的github链接,先说明,redisson除了开源版本,还有付费的pro版本,以后介绍的某些高级功能,如果是pro版本的,会标出
二、在SpringBoot中快速集成
Redisson是建立在Redis的基础之上的,所以需要在SpringBoot项目中引入Redis。
- 导入依赖
<!--starter形式-->
<!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.16.3</version>
</dependency>-----------------------------------------------------------------
<!--标准形式-->
<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.3</version>
</dependency>
- 在SpringBoot中配置。
官方文档给出了基于配置类和基于配置文件的形式,还有基于集群,基于主从,基于单节点模式的配置方式都不一样
,我这里给出基于配置文件的单节点模式,其他形式参考官方文档。
- redisson.yml文件
singleServerConfig:idleConnectionTimeout: 10000 #连接空闲超时,单位:毫秒 默认:10000connectTimeout: 10000 #连接超时,单位:毫秒。默认:10000timeout: 3000 #命令等待超时,单位:毫秒 默认:3000retryAttempts: 3 #命令失败重试次数retryInterval: 1500 #命令重试发送时间间隔,单位:毫秒# lockWatchdogTimeout: 30000 #监控锁的看门狗超时,单位:毫秒 该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。password: nullclientName: null #客户端名称subscriptionsPerConnection: 5 #单个连接最大订阅数量address: "redis://xxx.xxx.xxx.xxx:6379"subscriptionConnectionMinimumIdleSize: 1 #从节点发布和订阅连接的最小空闲连接数subscriptionConnectionPoolSize: 50 #从节点发布和订阅连接池大小# 集群模式下不支持该选项database: 2dnsMonitoringInterval: 5000 #DNS监控间隔,单位:毫秒 在启用该功能以后,Redisson将会监测DNS的变化情况sslEnableEndpointIdentification: true #启用SSL终端识别,默认为true
threads: 0 #线程池数量 默认值: 当前处理核数量 * 2
nettyThreads: 0 #Netty线程池数量 默认值: 当前处理核数量 * 2 ,这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。
codec: #编码 默认值:org.redisson.codec.JsonJacksonCodec,Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储!<org.redisson.codec.JsonJacksonCodec> {}
"transportMode": #传输模式 默认:TransportMode.NIO linux系统下可以使用RPOLL,性能高"NIO"
- RedisConfig
@Configuration
public class RedissonConfig {@Bean(destroyMethod="shutdown")public RedissonClient getRedissonClient() throws IOException {ResourceLoader loader = new DefaultResourceLoader();Resource resource = loader.getResource("redisson.yml");Config config = Config.fromYAML(resource.getInputStream());return Redisson.create(config);}
}
三、增删改查操作
每个Redisson对象实例都会有一个与之对应的Redis数据实例。Redisson的分布式RBucket对象是一种通用对象桶可以用来存放任类型的对象。先来写新增和查询。先通过redisson对象通过getBucket方法,在Redis中创建一个字符串类型的对象。这个对象的引用就是下面的bucket,它可以存放任意的Cityr对象实体。RBucket桶的神奇功能是:可直接存储City对象,省略了我们的City对象转为JSON字符串的过程。RBucket对象可以视为Redis中的 String类型,每个RBucket对象对应着一个值
。
- 新增:将City对象通过RBucket存放到Redis中。
- 查询的时候,通过KEY找到桶。再通过get() 方法取出缓存在Redis中的 指定的KEY的VALUE。
- 修改就是通过KEY找到这个桶RBucket,然后重新SET一下。
- 删除更简单了,找到这个桶,调用delete相关方法即可。
@Controller
@RequestMapping("redisson")
public class RedissonController {@AutowiredRedissonClient redissonClient;@ResponseBody@GetMapping("get/{id}")public City get(@PathVariable Long id){RBucket<City> city = redissonClient.getBucket("city"+id.toString());return city.get();}@ResponseBody@DeleteMapping("delete/{id}")public String delete(@PathVariable Long id){RBucket<City> bucket = redissonClient.getBucket("city" + id.toString());Optional<City> optionalCity=Optional.ofNullable(bucket.getAndDelete());return optionalCity.toString();}@ResponseBody@PutMapping("update")public String update(@RequestBody City city){RBucket<City> bucket = redissonClient.getBucket("city"+city.getId().toString());//更新缓存if (bucket!=null){bucket.set(city);return "ok";}else return "error";}@ResponseBody@PostMapping("add")public String add(@RequestBody City city){RBucket<City> bucket = redissonClient.getBucket("city"+city.getId().toString());try {bucket.set(city);return "ok";} catch (Exception e) {e.printStackTrace();return "error";}}
}
Redisson--------基础入门相关推荐
- 用python循环语句求素数_Python基础入门_3条件语句和迭代循环
Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...
- MAYA 2022基础入门学习教程
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...
- Blender 3.0基础入门学习教程 Introduction to Blender 3.0
成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...
- 三维地形制作软件 World Machine 基础入门学习教程
<World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...
- SketchUp Pro 2021基础入门学习视频教程
SketchUp Pro 2021基础入门学习视频教程 1280X720 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语+中文字幕( ...
- Maya基础入门学习教程
Maya基础入门学习教程 视频:.MKV, 1280x720, 共57节课 时长 4小时25分钟,3GB 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 指导老师:Shane Whitt ...
- Maya2022基础入门学习教程
Maya2022基础入门学习教程 Maya 2022 Essential Training Maya2022基础入门学习教程 Maya 2022 Essential Training MP4 |视频: ...
- Blender基础入门学习教程 Learning Blender from Scratch
Blender基础入门学习教程 Learning Blender from Scratch 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+ ...
- json vue 对象转数组_vue 基础入门(一)修改
vue基础入门(一) 1. 什么是vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标 ...
- python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程
教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...
最新文章
- ControlButton按钮事件
- Amber16和AmberTools16在CentOS 7下GPU加速版的安装
- 124. Binary Tree Maximum Path Sum
- PHP显示今天、今月、上月、今年的起点/终点时间戳
- Shell的一些基本用法
- [转]基于overlayfs的硬盘资源隔离工具troot
- jquery显示和隐藏元素
- python实现web服务器_python实现静态web服务器
- 介绍一个被称为十一边形战士的强大模型
- 选用什么的域名后缀好
- 求旋转中心【halcon定位】
- 嵌入式系统开发-麦子学院(11)——ARM Cortex A8 硬件基础(1)
- php双线切换线路,双线双路和断线自动切换
- An improved genetic algorithm for the flexible job shop scheduling problem with multiple time constr
- 一、微信小程序拼团项目简介
- 050 XSS通关小游戏——xss challenge
- PCDATA和CDATA区别
- 关于AckerMan函数
- 社交网络里的高级钓鱼攻击
- 【css】LCD液晶字体——自定义字体@font-face