场景: 文章评论分页=>redis存 key为articleId+页数 更新了点东西不好删除该分页涉及到的的全部内容
思路: 把分页的key全部查找出来 然后依次便利删除
实现:
/**
* 查找匹配key
*
* @param pattern key
* @return /
*/
public List<String> scan(String pattern) {
ScanOptions options = ScanOptions.scanOptions().match(pattern + "*").build();
RedisConnectionFactory factory = redisTemplate.getConnectionFactory();
RedisConnection rc = Objects.requireNonNull(factory).getConnection();
Cursor<byte[]> cursor = rc.scan(options);
List<String> result = new ArrayList<>();
while (cursor.hasNext()) {
result.add(new String(cursor.next()));
}
try {
RedisConnectionUtils.releaseConnection(rc, factory);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 清除缓存分页
* 实现思路 key:普通key redis模糊匹配出对应的key 然后便利删除
* @param redisKeyPrefix
* @return Boolean
* @author zhang
* @date 2022/5/24 8:18
*/
public void deleteKeys(String redisKeyPrefix) {
//判定key是否存在 查找匹配key
log.info("匹配到的redisKeyPrefix为============={}=============", redisKeyPrefix);
List<String> list = scan(redisKeyPrefix);
log.info("匹配到的key为============={}=============", list);
if (ObjectUtil.isNotEmpty(list)) {
list.stream()
.filter(Objects::nonNull)
.forEach(s -> {
Boolean del = del(s);
log.info("删除==={}", del);
}
);
}
使用:
@Autowired
private RedisUtil redisUtil;
@Test
void testPay() {
redisUtil.deleteKeys("articleComment::151742802195560448");
}
结果展示: