前期概要
Spring Boot 操作Redis数据库,有三种方式:
01.Jedis (Api比较全面)官方推荐的客服端
02.Lettuce (缓存)Spring Boot 内置
03.RedisSon 分布式锁
Spring Data Redis
RedisTemplate(一般为键的操作)、ValueOperations(字符串操作)、HashOperations(哈希类型)、ListOperations(列表) 、SetOperations(集合)、ZsetOperations(有序集合)
Idea 连接Redis
- 创建Redis项目工程 导入Mven工程
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置application.yml文件
spring:
redis:
database: 10
host: 你自己的端口号
port: 6379
password: ""
timeout: 5s
# s 秒 ns 微秒 m 分钟 h小时 d 天
connect-timeout: 3s
lettuce:
pool:
# 空闲最小链接
min-idle: 0
max-wait: 10s
# 核心连接数
max-idle: 5
# 最大连接数
max-active: 8
- 创建配置类
@Configuration
public class RedisConfig {
/**
*
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
// FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
StringRedisSerializer keyRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(keyRedisSerializer);
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
// 注册到RedisConnectionFactory
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
- 测试
@SpringBootTest
@Slf4j
public class RedisTemplateTest {
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Test
public void exists() {
Boolean b = redisTemplate.hasKey("test:key");
assert b!= null;
log.debug(b.toString());
}
@Test
public void del(){
Boolean delete = redisTemplate.delete("test:key");
redisTemplate.expire("test:key:exp",1, TimeUnit.MINUTES);
redisTemplate.expire("test:key:exp", Duration.ofMinutes(1));
Date date = new Date(System.currentTimeMillis() + 6 * 1000);
redisTemplate.expireAt("test:key:exp",date);
}
@Test
public void expire(){
//ttl 获取过期时间
Long expire = redisTemplate.getExpire("test:key:exp");
}
}
@SpringBootTest
@Slf4j
public class SetOperationsTest {
@Resource
private RedisTemplate redisTemplate;
@Test
public void sadd() {
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("friend:user:id:" + 1, 6, 2, 3, 4, 5, 4);
setOperations.add("friend:user:id:" + 2, 10, 11, 3, 6);
Set set = setOperations.intersect("friend:user:id:" + 1, "friend:user:id:" + 2);
set.forEach(item -> {
log.debug(item.toString());
});
}
}