Springboot中的redis用scan代替keys命令

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

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

    ScanOptions options = ScanOptions.scanOptions().match("xxx:prefix:xxx:*").count(1000)
      .build();
    Cursor cursor = (Cursor) 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命令)