前言

redisson的整合很简单,这里直接上代码和演示“读写锁”测试,其他更多的“并发锁”,详情见官方文档(地址见文章末尾),官方写得很详细,这里不赘述了。

1、引入依赖

 <!-- 导入 redission 依赖 -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId>
</dependency>

2、添加配置类

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @description Redisson 配置类*/
@Configuration
public class MyRedissonConfig {@Value(value = "${spring.redis.host}")private String host;@Value(value = "${spring.redis.port}")private int port;@Value(value = "${spring.redis.database}")private int database;@Value(value = "${spring.redis.password}")private String password;/*** 单Redis节点模式配置方法* 其他配置參數,看:* <a href = "https://github.com/redisson/redisson/wiki/2.-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95#26-%E5%8D%95redis%E8%8A%82%E7%82%B9%E6%A8%A1%E5%BC%8F">* 单Redis节点模式配置方法* </a>** @return {@link RedissonClient}*/@Bean(destroyMethod = "shutdown")RedissonClient redisson() {Config config = new Config();//Redis多节点// config.useClusterServers()//     .addNodeAddress("redis://127.0.0.1:6379", "redis://127.0.0.1:7001");//Redis单节点SingleServerConfig singleServerConfig = config.useSingleServer();//可以用"rediss://"来启用SSL连接String address = "redis://" + host + ":" + port;singleServerConfig.setAddress(address);//设置 数据库编号singleServerConfig.setDatabase(database);singleServerConfig.setPassword(password);//连接池大小:默认值:64// singleServerConfig.setConnectionPoolSize()return Redisson.create(config);}}

读写锁 (ReadWriteLock)

演示“读写锁”测试,其他更多的“并发锁”,详情见官方文档(地址见文章末尾),官方写得很详细,这里不赘述了。

测试要点:

- 读锁和写锁共用一个锁key,命名为:readWriteLock;
- 读锁接口只负责读, JMeter压测每秒并发20,持续压测;
- 写锁接口负责向缓存中写入随机字符串 UUID ,线程睡眠3秒, 模拟业务处理;
- 先启动压测并发20读接口,然后发起“写锁请求1”,再发起“写锁请求2”。观察控制台打印的结果。

测试代码:

   /*** 读写锁(ReadWriteLock) 测试1* 读锁:共享锁,所有线程共享读锁* 写锁: 独占锁,只能单独线程占用,执行完才能执行其他“读写锁”。*/@ResponseBody@GetMapping("/test/readWriteLock/toRead")public String toReadLock() {//获取 锁RReadWriteLock readWriteLock = redisson.getReadWriteLock("readWriteLock");RLock rLock = readWriteLock.readLock();//上 读锁rLock.lock();String writeValue = "";try {log.info("【读锁-{}】加锁成功,读数据...", Thread.currentThread().getId());writeValue = redisTemplate.opsForValue().get("writeValue");} finally {log.info("【读锁-{}】解锁成功,uuid={}", Thread.currentThread().getId(),writeValue);//解锁rLock.unlock();}return writeValue;}/*** 读写锁(ReadWriteLock) 测试2*/@ResponseBody@GetMapping("/test/readWriteLock/toWrite")public String toWriteLock() {//获取 锁RReadWriteLock readWriteLock = redisson.getReadWriteLock("readWriteLock");RLock rLock = readWriteLock.writeLock();//上 写锁rLock.lock();String uuid = UUID.randomUUID().toString();try {log.info("【写锁-{}】加锁成功,睡眠3秒,模拟执行业务...", Thread.currentThread().getId());Thread.sleep(3000);redisTemplate.opsForValue().set("writeValue", uuid);} catch (InterruptedException e) {e.printStackTrace();} finally {log.info("【写锁-{}】解锁成功,uuid={}", Thread.currentThread().getId(),uuid);//解锁rLock.unlock();}return "writeLock ok,uuid = " + uuid;}

测试结果:

并发20读锁接口,观察redis缓存值变化,如下图:

写锁接口请求时,观察redis缓存值变化,如下图:

写锁请求1,控制台打印,如下图:

写锁请求2,控制台打印,如下图:

结论:

  • ”读-读-读…读“,并发读时,“读锁”相当于没有锁。
  • “读-写”或者“写-读”,只要有”写锁“的存在,就要等待”写锁“的释放,才能”读“。写锁时独占锁。

结论:读锁是共享锁,写锁是独占锁。

3、参考地址:

  • Redis 分布式锁:关于使用 Redlock 算法的官方说明(英文版)
  • Redis 分布式锁:关于使用 Redlock 算法的官方说明(中文版)
  • Redisson 官方GitHub地址主页
  • Redisson 官方说明文档地址

Springboot 整合 Redisson相关推荐

  1. springboot整合redisson实现多种分布式锁

    Redisson概述 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid).它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式 ...

  2. springboot整合redisson(一)搭建Redisson环境

    一.创建springboot项目 1.通过idea创建springboot项目 2.通过web网站创建springboot项目 创建完之后的项目结构如下: 二.引入redisson依赖 由于我们是sp ...

  3. SpringBoot整合Redisson实现延迟队列

    SpringBoot整合Redisson实现延迟队列 技术选型 引入 Redisson 依赖 配置项 编写工具类 延迟队列执行器 业务消费类枚举 加载消费队列 消费者类 测试类 测试结果 技术选型 关 ...

  4. springboot整合redisson实现分布式锁

    一.介绍Redisson Redisson是Redis官方推荐的Java版的Redis客户端(Jedis.letture也是官方推荐的java版本redis客户端程序).它提供的功能非常多,也非常强大 ...

  5. SpringBoot整合redisson分布式锁

    1.为什么要使用分布式锁 在分布式场景下为了保证数据最终一致性.在单进程的系统中,存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步(lock-synchronized), ...

  6. SpringBoot整合Redisson

    Redisson官方文档: https://github.com/redisson/redisson/wiki 简介:Redisson 是架设在 Redis 基础上的一个 Java 驻内存数据网格(I ...

  7. springboot整合redisson实战(二)Redisson分布式锁的使用

    redisson锁说明 Redisson是基于Netty实现的,是更高性能的第三方库.实现了可重入锁(Reentrant Lock).公平锁(Fair Lock.联锁(MultiLock). 红锁(R ...

  8. 【4】【实战分布式锁三】SpringBoot注解整合Redisson分布式锁

    1. Redisson Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid).充分的利用了Redis键值数据库提供的一系列优势,基于Java实 ...

  9. springboot整合Redis分布式锁最佳实践

    什么是分布式锁 在单机环境中,一般在多并发多线程场景下,出现多个线程去抢占一个资源,这个时候会出现线程同步问题,造成执行的结果没有达到预期.我们会用线程间加锁的方式,比如synchronized,lo ...

最新文章

  1. 写缓冲器 + 无效队列,优化MESI协议的性能
  2. java写一个搜索引擎_搜索引擎—-Java实现一个简单的网络爬虫
  3. CVPR 2020 论文大盘点-动作检测与动作分割篇
  4. 如何运行vue项目(从gethub上download的开源项目)
  5. java中什么是字节流和字符流_java中字节流与字符流的区别是什么
  6. Pandas 索引(index)/选取(select)/标签(label)操作
  7. ctfshow-WEB-web10( with rollup注入绕过)
  8. Mac安装IDA后各版本android_server
  9. django项目介绍
  10. 从零开始一个cli脚手架并发布到NPM(上篇)
  11. 【网页截图亲测可用】Linux + python3 + selenium + chrome + chrome-driver 服务器端网页截图
  12. 【渝粤教育】 国家开放大学2020年春季 1332中文学科论文写作 参考试题
  13. 外语学习应试教育时如何高效的背单词?
  14. 重装Windows系统 (以联想Y700重装Win10专业版为例)
  15. 【BZOJ2095】 Bridge
  16. 掌控程序运行,你需要一台超级变速箱
  17. Wordpress更换ip不能正常访问解决方法
  18. 三、小脚本<%##%>
  19. RXXW H系列变频器调试指导参考手册
  20. 模拟数据采集卡之ADCTDC 模拟时间/数字转换器组合应用选型指南

热门文章

  1. 几种创建vue项目的方法
  2. ORA-00918: 未明确定义列(嵌套查询容易犯的错误)
  3. Java第三方支付接入案例(支付宝)
  4. 文件共享服务器 利用445端口
  5. 详解美摄汽车图像及视频处理方案(三)
  6. 关于 Redis 缓存的几道典型面试题!
  7. html视觉彩条区域怎么打,创意彩条装饰教案.doc
  8. LPC11C14刷卡门锁
  9. Java基础复习-4-抽象类、内部类、接口
  10. centos7挂载超过2T的磁盘