最近项目中有通过模糊匹配拿到redis中的键值的需求,但是官方文档和博客中的谬误太多,因此我在这里写一下我使用redis进行模糊匹配的方式。
第一步添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
第二步添加配置类
@Configuration
public class RedisConfig {
/**
* 配置RedisTemplate的序列化方式
*/
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
// 指定key的序列化方式:string
redisTemplate.setKeySerializer(RedisSerializer.string());
// 指定value的序列化方式:json
redisTemplate.setValueSerializer(RedisSerializer.json());
return redisTemplate;
}
}
第三步模糊匹配拿到键集
这里我试过了*号一定要写在:后面才能实现模糊匹配,否则无法完成。之后通过写好的模糊键值放入keys()方法中即可完成模糊匹配。
String ownerKey =RedisConstant.OWNER_KEY+phone+":*";
Set<String> keys = redisTemplate.keys(ownerKey);
注意:这里使用的是redisTemplate.keys()这个方法进行模糊匹配的,如果使用的是其它方法是无法使用模糊匹配的。
第四步遍历键集拿到值集
// 遍历拿到值集
for (String key : keys) {
String str = (String) redisTemplate.opsForValue().get(key);
VisitorRecordsDto fromRedis = objectMapper.readValue(str, VisitorRecordsDto.class);
}