Redis:生産環境でkeyをどのように曖昧にクエリーしますか?
1633 ワード
一般的にテスト環境ではkeysコマンドを使用して、必要なkeyに曖昧にクエリーできますが、この操作はテスト環境でのみ使用するのに適しており、生産環境で使用するのに適していません.redisは単一スレッドで実行されているため、redisのデータ量が大きい場合、この操作はすべてのデータを遍歴し、結果を一度にすべて返し、実行時間が長くなり、後続の操作が待機します.システムの正常な動作に直接影響します.解決策はscanコマンドを使用することです.
scan cursor [MATCH pattern] [COUNT count] cursor:カーソルを表し、「0」から始まると、このコマンドの実行後に新しいcursor値が返されます.cursor!「0」は、keyが返されていないことを示し、scanを呼び出し、この新しいcursor値を使用して次のkeyを取得する必要があります.cursor=「0」の場合、ループが終了します. pattern:ファジイマッチングを表すスタイル count:バッチが最大何個のレコードを返すかを示し、デフォルトは10 です.
Javaコードの例を次に示します.
リファレンスドキュメント
SCAN cursor[MATCH pattern][COUNT count][TYPE type]Redisコマンドリファレンス»Key(キー)]SCAN Redisのkeyを一括削除する方法
scan cursor [MATCH pattern] [COUNT count]
Javaコードの例を次に示します.
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
public class RedisTester {
public static Jedis getRedis() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println("connect successfully");
jedis.auth("XXXXXXXXXX");
return jedis;
}
public static void main(String[] args) {
Jedis jedis = getRedis();
String cursor = "0";
do {
ScanParams scanParams = new ScanParams();
scanParams.match("activity560.user*");
scanParams.count(10);
ScanResult sr = jedis.scan(cursor, scanParams);
List resultList = sr.getResult();
for (String result : resultList) {
System.out.println("key: " + result);
}
cursor = sr.getStringCursor();
System.out.println("cursor: " + cursor);
} while (!cursor.equals("0"));
}
}
リファレンスドキュメント
SCAN cursor[MATCH pattern][COUNT count][TYPE type]Redisコマンドリファレンス»Key(キー)]SCAN Redisのkeyを一括削除する方法