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