版权声明:本文为CSDN博主「她的坏机器人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42193813/article/details/109742921
Lettuce 和 Jedis 的都是连接Redis Server的客户端
Jedis是直接连接Redis Server,在多线程环境下是非线程安全的,只有使用连接池
Lettuce是基于Netty实现,是线程安全的
在SpringBoot 1.5.x版本默认的Redis客户端是Jedis实现的,SpringBoot 2.x版本默认客户端是用lettuce实现的
以下步骤为SpringBoot整合Lettuce版的Redis
1、导入依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
<version>2.3.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-pool2artifactId>
<version>2.9.0version>
dependency>
2、配置application.yml
创建SpringBoot工程默认是application.propertis,但推荐使用.yml文件,所以我将其修改为.yml文件
SpringBoot默认会加载application.propertis或者application.yml,两种都可识别
spring:
redis:
database: 0
host: 192.168.229.11
port: 6379
password: 123456 # 如果没有密码,可以不写
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
timeout: 2000
3、编写配置类
因为默认的模板只能存储字符串类型的,所以我们需要自定义RedisTemplate,满足可以存放更多类型的数据
@Configuration
public class LettuceRedisConfig {
@Bean
public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
4、创建工具类
@Component
public class RedisUtils {
@Resource
private RedisTemplate<String, String> redisTemplate;
/**
* 设置key-value
* @param key 键
* @param value 值
*/
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
/**
* 设置带生存时间的key-value
* @param key 键
* @param value 值
* @param timeout 生存时间
* @param unit 时间单位
*/
public void set(String key, String value, long timeout, TimeUnit unit) {
redisTemplate.opsForValue().set(key, value, timeout, unit);
}
/**
* 设置指定数据的生存时间。
*
* @param key 键
* @param time 生存时间(秒)
*/
public void expire(String key, long time) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
/**
* 根据key,获取值
* @param key 键
* @return 获取到的值
*/
public String get(String key) {
return String.valueOf(redisTemplate.opsForValue().get(key));
}
/**
* 删除指定信息。
*
* @param key 键
* @return 是否删除成功
*/
public boolean delete(String key) {
return redisTemplate.delete(key);
}
}
5、使用
// 在需要的类中引用
@Resource
private RedisUtils redisUtils;
// 然后在需要的地方使用
redisUtils.set(phone, phoneCode, 60, TimeUnit.SECONDS);