Redisson的简单使用
Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。
Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
Redisson和jedis以及lettuce一样都是redis客户端,只不过Redisson功能更强大。
Redisson的作用
1.集成了大量redis的方法,操作更简单
2.提供了非关系型数据库,不需要频繁操作数据库
3.提供了分布式锁可以有效避免高并发带来的数据丢失
4.服务器集群部署时,解决不同服务器同时执行同一方法问题。
官方文档
目录 · redisson/redisson Wiki · GitHub
https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95
Redisson的使用
依赖引入:
maven
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.0</version>
</dependency>
</dependencies>
application.yml
server:
port: 8183
spring:
application:
name: redission-study
redis:
# 数据库索引
database: 0
# 单节点redis配置
host: 192.168.31.236
port: 6379
Controller
分布式ID
@Autowired
RedissonClient redissonClient;
@GetMapping("/getOrderNumber")
@ResponseBody
public String getOrderNumber() {
//格式化格式为年月日
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
//获取当前时间
String now = LocalDate.now().format(dateTimeFormatter);
//通过redis的自增获取序号
RAtomicLong atomicLong = redissonClient.getAtomicLong(now);
atomicLong.expire(1, TimeUnit.DAYS);
//拼装订单号
return now + "" + atomicLong.incrementAndGet();
}
测试:
用JMeter对其进行多线程并行测试,线程数:20

初始值是20220416118,之前已经测试过

测试完成,20次都成功
浏览器访问一次看结果

20220416118+20=20220416138,再访问一次就是20220416139
结论:RAtomicLong源码已经提供了锁,在高并发下也不会丢失数据
RAtomicLong也提供了对数据进行set和get方法
分布式锁
常见方法
anyLock:redission队列的唯一标识
//获取分布式锁
RLock lock = redissonClient.getLock("anyLock");
上锁
两种常用上锁方式tryLock()或者lock()
lock.lock();
transferLock.lock(10,TimeUnit.SECONDS);
waittime=10 排队等待时间,leasetime=300,锁维持时间,TimeUnit.SECONDS=时间单位 秒
lock.tryLock()
lock.tryLock(10,300,TimeUnit.SECONDS);
释放锁
lock.unlock();
更多推荐


所有评论(0)