介绍
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中央仓库,附详细使用说明)