RedisTemplateはSCANコマンドスキャンキーを使用してKEYSの代わりにredisサーバのブロックを回避し、ピットがない!完璧なソリューション
まず、ブログの多くの人がでたらめを言ったり、大衆を誤解したりしていることを軽蔑し、本文はオリジナルで自分で案を検証した.
あまり話さないで先にコードをつけて、持って行ってすぐ使います.
あまり話さないで先にコードをつけて、持って行ってすぐ使います.
long start = System.currentTimeMillis();
// key
String patternKey = "pay:*";
ScanOptions options = ScanOptions.scanOptions()
// key ( Integer.MAX_VALUE, keys ?)
.count(10000)
.match(patternKey).build();
RedisSerializer redisSerializer = (RedisSerializer) redisTemplate.getKeySerializer();
Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redisConnection -> new ConvertingCursor<>(redisConnection.scan(options), redisSerializer::deserialize));
List result = new ArrayList<>();
while(cursor.hasNext()){
result.add(cursor.next().toString());
}
// , 。 Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisException: Could not get a
cursor.close();
log.info("scan :{} ms key :{}",System.currentTimeMillis()-start,result.size());