> 文档中心 > redis 模糊查询 批量删除

redis 模糊查询 批量删除

场景: 文章评论分页=>redis存 key为articleId+页数 更新了点东西不好删除该分页涉及到的的全部内容 

思路: 把分页的key全部查找出来 然后依次便利删除

实现:

  /**     * 查找匹配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");    }

结果展示:

旅游攻略大全