redis的key是字节数组,请问怎么批量删除?

颖辉小居 发布于 03/08 13:37
阅读 278
收藏 0

比如 key 是 (固定前缀+id).getBytes()。 我怎么能删除包含这个固定前缀字节化的所有key。

加载中
1
kakai
kakai

getBytes方法最好加入字符编码的参数,不然多机器要是各自的系统默认字符编码不一致时,你这个问题就严重了。我记得用utf8把字符串key转换为字节存入以后,直接用字符串一样能取出对应的key,用其它编码可能就不能互通了。

0
一个字-干
一个字-干

redis的批量删除不大好,keys("xxx*")不能用,scan也不好用,感觉可以用expire来指定key的超时,用特定的标记来指定某些id不再有效,重新刷新缓存

0
颖辉小居
颖辉小居
 /**
      * @Description:   删除所有REDIS_KEY_PRE 前缀的缓存
      * @Author:        张颖辉(yh)
      * @Date:          2019/3/11 11:16
      * @param:
      * @return:
      * @Version:       1.0
      */
    public void delAll() {
        Jedis jedis = redisClientDataSource.getRedisClient();
        if (jedis == null) {
            return;
        }
        boolean broken = false;
        Set<String> set = jedis.keys(CoreConst.REDIS_KEY_PRE + "*");
        Iterator<String> it = set.iterator();
        try {
            while (it.hasNext()) {
                String keyStr = it.next();
                log.debug("删除字典缓存 key :" + keyStr);
                jedis.del(keyStr.getBytes(charsetName));
            }
            log.debug("共删除缓存 " + set.size() + " 项");
        } catch (Exception e) {
            log.error("redis 删除全部 时出错");
            log.error(ExceptionUtil.exceptionStack2String(e));
            broken = true;
        } finally {
            redisClientDataSource.returnResource(jedis, broken);
        }
    }

 

返回顶部
顶部