介绍
Redisson是一个在Redis基础上实现的Java驻内存数据网格。Redisson提供了使用Redis的最简单最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中的放在处理业务逻辑上。
Redisson官方文档地址:https://github.com/redisson/redisson/wiki
使用
首先在项目中添加Redisson的依赖,如下 我这里使用的是目前github上的最新版本
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.21.1</version> </dependency>
官网文档中的配置说明,可以看到有两种配置方式,程序化配置和yaml配置
我这里选择第一种程序化配置方式,并且配置的是单机节点模式,创建一个配置类如下
package com.vhukze.lockdemo.config; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * redisson 配置类 * * @author vhukze * @date 2023/5/17 - 18:43 */ @Configuration public class RedissonConfig { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private String port; @Bean public RedissonClient redissonClient() { // redis 地址为127.0.0.1:6379 时, 可以无需配置 一行代码搞定 // RedissonClient redisson = Redisson.create(); Config config = new Config(); config.useSingleServer().setAddress("redis://" + host + ":" + port); return Redisson.create(config); } }
使用时注入Redisson客户端类即可
简单写了一个减库存的操作
原库存为3000,使用jmeter访问3000次这个接口,结果还剩两千多
下面加上Redisson的分布式锁
再次使用jmeter测试,可以看到库存已经减为0了
常用配置
在创建Redisson的配置类时,还有很多其他配置需要了解
上面案例中是配置了单机模式,实际使用中可以还会用到其他几种模式,集群模式 主从模式等等 如下图
其他相关配置
@Bean public RedissonClient redissonClient() { // redis 地址为127.0.0.1:6379 时, 可以无需配置 一行代码搞定 // RedissonClient redisson = Redisson.create(); Config config = new Config(); // 使用单机模式 config.useSingleServer().setAddress("redis://" + host + ":" + port) // 指定Redis数据库编号 .setDatabase(0) // 设置Redis用户名和密码 .setUsername("").setPassword("") // 设置连接池最小空闲连接数 .setConnectionMinimumIdleSize(10) // 设置连接池最大线程数 .setConnectionPoolSize(50) // 设置线程超时时间为 .setIdleConnectionTimeout(60000) // 设置客户端程序获取Redis连接的超时时间 .setConnectTimeout(30000) // 设置响应超时时间 .setTimeout(30000); return Redisson.create(config); }
还有就是在加锁的时候,可以给锁设置一个过期时间
RLock lock = redissonClient.getLock("lock");
lock.lock(10, TimeUnit.SECONDS);
推荐阅读:做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)