redis利用游标代替keys
/**
* scan 实现
*
* @param pattern 表达式
* @param consumer 对迭代到的key进行操作
*/
public void scan(String pattern, Consumer<byte[]> consumer) {
this.redisTemplate.execute((RedisConnection connection) -> {
try (Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().count(Long.MAX_VALUE).match(pattern).build())) {
cursor.forEachRemaining(consumer);
return null;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
});
}
使用示例:
//游标代替keys
redisCache.scan("menus:*", new Consumer<byte[]>() {
@Override
public void accept(byte[] bytes) {
redisCache.delKey(new String(bytes));
}
});