专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Jedis运用scan删除正则匹配的key


import redis.clients.jedis.Jedis; import redis.clients.jedis.ScanParams; import redis.clients.jedis.ScanResult; import java.util.List; import java.util.Set; public class RedisApplication { private static String prefix = "ws:"; static Jedis jedis; static { jedis = new Jedis("localhost"); System.out.println("连接成功"); } public static void main(String[] args) { // init(); list(); // scan(); del(); } private static void del() { Long count = jedis.del("abc"); System.out.println(count); } private static void scan() { ScanParams params = new ScanParams(); params.match("ws:*"); // params.count(3); String cursor = "0"; while (true) { ScanResult<String> scanResult = jedis.scan(cursor, params); List<String> elements = scanResult.getResult(); if (elements != null && elements.size() > 0) { System.out.println(elements); } cursor = scanResult.getStringCursor(); if ("0".equals(cursor)) { break; } } } private static void list() { Set<String> keys = jedis.keys("ws:*"); for (String key : keys) { System.out.println(key); } System.out.println("===="); } private static void init() { for (int i = 0; i < 5; i++) { jedis.set(prefix + i, i + ""); } } }

keys为何不能在生产使用?

redis的keys命令,通来在用来删除相关的key时使用,但这个命令有一个弊端,在redis拥有数百万及以上的keys的时候,会执行的比较慢,更为致命的是,这个命令会阻塞redis多路复用的io主线程,如果这个线程阻塞,在此执行之间其他的发送向redis服务端的命令,都会阻塞,从而引发一系列级联反应,导致瞬间响应卡顿,从而引发超时等问题,所以应该在生产环境禁止用使用keys和类似的命令smembers,这种时间复杂度为O(N),且会阻塞主线程的命令,是非常危险的。

scan的优点

那么在生产环境我们应该使用scan命令,代替keys命令,同样是O(N)复杂度的scan命令,支持通配查找,scan命令或者其他的scan如SSCAN ,HSCAN,ZSCAN命令,可以不用阻塞主线程,并支持游标按批次迭代返回数据,所以是比较理想的选择。keys相比scan命令优点是,keys是一次返回,而scan是需要迭代多次返回。 但scan命令的也有缺点,返回的数据有可能重复

文章永久链接:https://tech.souyunku.com/18508

未经允许不得转载:搜云库技术团队 » Jedis运用scan删除正则匹配的key

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们