ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis模糊查询键值对

2020-11-04 10:00:38  阅读:393  来源: 互联网

标签:scan 查询键 模糊 redis System cursor result key println


1.要模糊查询redis中的key

方法一:使用scan命令(推荐)

scan cursor [MATCH pattern] [COUNT count]
  • cursor:表示游标,从“0”开始,此命令执行完后会返回一个新的cursor值。如果cursor!="0",则表示还有key未返回,需要再调用scan,并使用此新的cursor值,来获取下一批key;如果cursor=="0",则表示遍历结束。
  • pattern:表示模糊匹配的样式
  • count:表示一批最多返回多少条记录,默认为10

  注: keys pattern里面有3个通配符 分别是 *,?,[]

    *:通配多个任意字符

    ?:通配单个字符

    []:通配数组内的某个字符

 

java实现:

do {
            ScanParams scanParams = new ScanParams();
        //*表示匹配任意数量的任意字符 scanParams.match("xxxx*"); scanParams.count(10); ScanResult<String> sr = jedis.scan(cursor, scanParams); List<String> resultList = sr.getResult(); for (String result : resultList) { System.out.println("key: " + result);

//对key的操作,或者先放到一个集合里面,然后再进行后续操作 } cursor = sr.getStringCursor(); System.out.println("cursor: " + cursor); } while (!cursor.equals("0"));

 

方法二:keys 指令 (只适合在测试环境中使用,不适合在生产环境中使用,原因是redis是单线程运行的,当redis中的数据量很大时,由于此操作会遍历所有数据,并将结果一次性全部返回,执行时间会比较长,从而导致后续操作等待,直接影响系统的正常运行)

@Autowired
private RedisTemplate redisTemplate;
public void getKey() {
        long start = System.currentTimeMillis();
        redisTemplate.keys("cart*");
        long end = System.currentTimeMillis();
        System.out.println(end - start);
        RedisConnection connection = RedisConnectionUtils.getConnection(redisTemplate.getConnectionFactory());
        Cursor<byte[]> result = connection.scan(new ScanOptions.ScanOptionsBuilder().count(10).match("cart*").build());
        long start1 = System.currentTimeMillis();
        //cursor有id和position这两个属性,id则对应 scan cursor 的cursor的值,poisition则是当前遍历到第几个
        while (result.hasNext()) {//这里可以改用for循环来获取指定数量的key
            String key=new String(result.next());
            //对key的操作,或者先放到一个集合里面,然后再进行后续操作
        }
        long end1 = System.currentTimeMillis();
        System.out.println(end1 - start1);
}

 

结束

标签:scan,查询键,模糊,redis,System,cursor,result,key,println
来源: https://www.cnblogs.com/dztHome/p/13924419.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有