redis 模糊查询 批量删除
场景: 文章评论分页=>redis存 key为articleId+页数 更新了点东西不好删除该分页涉及到的的全部内容
实现:
/** * 查找匹配key * * @param pattern key * @return / */ public List scan(String pattern) { ScanOptions options = ScanOptions.scanOptions().match(pattern + "*").build(); RedisConnectionFactory factory = redisTemplate.getConnectionFactory(); RedisConnection rc = Objects.requireNonNull(factory).getConnection(); Cursor cursor = rc.scan(options); List 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 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"); }
结果展示: