zoukankan      html  css  js  c++  java
  • redis模糊查询键值对

    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);
    }

    结束

  • 相关阅读:
    [zt]活法
    Oracle: wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
    主题:福布斯中文网的一篇关于 宽带山男和篱笆女的文章
    Oracle:指定时间范围内的周分组输出.
    Oracle:查看表空间使用情况.
    Oracle:SQL优化基本步骤
    .NET调用ORACLE存储过程使用数组参数
    CTM CJQ高手指点怎么输出手法
    Oracle:DBMS_RANDOM.VALUE取随机数.
    ASPNET:DateFormatString详解
  • 原文地址:https://www.cnblogs.com/dztHome/p/13924419.html
Copyright © 2011-2022 走看看