Java Redis获取key的方式

方案一:keys *

keys的模糊匹配功能很方便也很强大,但是在生产环境需要慎用!

开发中使用keys的模糊匹配却发现redis的CPU使用率极高,所以公司的redis生产环境将keys命令禁用了!redis是单线程,会被堵塞

方案二:scan

SCAN 命令是一个基于游标的迭代器,SCAN命令每次被调用之后,都会向用户返回一个新的游标,用户在下次选代时需要使用这个新游标作为SCAN命令的游标参数,以此来延续之前的选代过程。

代码实现

scan方法

typescript 复制代码
/**
 * 扫描主键,建议使用
 * @param patten
 * @return
 */
public Set<String> scan(String patten){
    Set<String> keys = stringRedisTemplate.execute((RedisCallback<Set<String>>) connection -> {
        Set<String> result = new HashSet<>();
        try (Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder()
                .match(patten).count(10000).build())) {
            while (cursor.hasNext()) {
                result.add(new String(cursor.next()));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    });
    return  keys;
}

使用

匹配"future_*"开头的所有key

typescript 复制代码
@Test
public void keys(){
    Set<String> scan = cacheService.scan("future_*");
    System.out.println(scan);
}
相关推荐
stark张宇14 分钟前
Go语言核心三剑客:数组、切片与结构体使用指南
后端·go
洛小豆24 分钟前
她问我:数据库还在存 Timestamp?我说:大人,时代变了
数据库·后端·mysql
Aevget29 分钟前
智能高效Go开发工具GoLand v2025.3全新上线——新增资源泄漏分析
开发语言·ide·后端·golang·go
廖广杰31 分钟前
线程池深度解析
后端
邵伯31 分钟前
为什么你的 SELECT 有时会阻塞?
数据库·后端
洛小豆41 分钟前
代码修仙录 · 第1期:宗门大阵崩了?只因少了毫秒三魂!
数据库·后端·mysql
她说..42 分钟前
Spring 核心工具类 AopUtils 超详细全解
java·后端·spring·springboot·spring aop
无限大643 分钟前
为什么"缓存"能提高系统性能?——从 CPU 缓存到分布式缓存
后端·面试
开心猴爷1 小时前
App Store 上架截图批量上传,提高上架流程的稳定性
后端