美文网首页
Springboot中的redis用scan代替keys命令

Springboot中的redis用scan代替keys命令

作者: happut | 来源:发表于2019-12-19 12:10 被阅读0次

    生产环境一般会屏蔽掉keys命令,但是有时会用到这个命令,比如刷新缓存,会把相同特定前缀的key都删除掉,如果没有keys命令,怎么进行删除呢?

    通过Cursor获取要删除的key,例如key的前缀是xxx:prefix:xxx:

        ScanOptions options = ScanOptions.scanOptions().match("xxx:prefix:xxx:*").count(1000)
          .build();
        Cursor<String> cursor = (Cursor<String>) redisTemplate.executeWithStickyConnection(
          redisConnection -> new ConvertingCursor<>(redisConnection.scan(options),
            redisTemplate.getKeySerializer()::deserialize));
    
        cursor.forEachRemaining(key -> {
          redisTemplate.delete(key);
        });
    

    .count(1000)中的1000是步进值,过小效率会低一些,尽量与数据级匹配些。
    redisTemplate.delete(key);这部分可以替换成自己的代码,可以删除,也可以进行一些别的操作

    相关文章

      网友评论

          本文标题:Springboot中的redis用scan代替keys命令

          本文链接:https://www.haomeiwen.com/subject/cbkunctx.html