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

 

結束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM