redis模糊查詢鍵值對
阿新 • • 發佈:2020-11-04
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); }
結束