当前位置: 首页 > 知识库问答 >
问题:

以块形式从redis缓存中清除数据

谷泳
2023-03-14

我需要从redis缓存中删除一个池。但是,这个池可能有数百万个密钥。我正在使用以下代码从缓存中删除键

String regex = "*." + poolname + ".*";
Set<String> rkeys = jedis.keys(regex);

for (String key : rkeys) {
    LOGGER.info("key ===>" + key);
    jedis.del(key);
}

我担心redis服务器可能会崩溃,万一有百万行。有没有办法让redis每次只选择100行并删除。类似于

while (true) {
    //sleep for 1 minute
    //get 100 rows from cache
    if (keys.isEmpty()) {
        break;
    }
    jedis.del(key);
}

共有1个答案

林星华
2023-03-14

Redis永远不会崩溃,我会在预感到代码变得更复杂之前测试这个场景。我刚创建了一百万个密钥并删除了它们。花了2分钟,瓶颈是ruby客户端,而不是重做。

也就是说,您可能需要查看https://redis.io/commands/unlink,这是DEL的一个新的非阻塞版本。

 类似资料:
  • redis 形式的缓存 php 扩展需求 需要开启 php_memcache 扩展 redis 相关知识:http://www.hcoder.net/books/read_10105.html 修改或添加全局配置 phpGrace/config.php //缓存类型 'allowCacheType' => array('file', 'memcache', 'redis'), //缓存设置

  • void clear_cache(string template [, string cache id [, string compile id [, int expire time]]]) This clears the cache for a specific template. If you have multiple caches for this template, you can cl

  • 问题内容: 我想编写一个实用程序,用户可以在其中选择一组已安装的应用程序并清除其数据缓存,例如,您可以使用内置的“设置”->“应用程序”设置屏幕中的“清除缓存”按钮来手动执行此操作。 如何访问每个应用程序具有多少缓存数据并以编程方式清除这些缓存? 问题答案: 普通的SDK应用程序无权访问(更不用说修改)其他应用程序的缓存了,甚至无权修改您的文件。 在具有以root用户身份运行的应用程序的有根电话上

  • 问题内容: 我正在计划将C#ASP.Net Web应用程序移到Azure(当前托管在单个专用服务器上)的过程中,并且正在研究缓存选项。当前,因为我们一次只能运行一个应用程序实例,所以我们有一个“进程中”内存缓存来缓解SQL DB的某些相同请求。 当前的过程是在管理器/服务对数据库的那些部分进行更改时清除缓存的某些部分,例如,我们有一个用户表,并且我们将拥有诸如“ User。{0}”之类的键,返回一

  • 问题内容: 我们希望在生产部署中缓存崩溃,但不要浪费大量时间来弄清楚这样做的系统。我的想法是将具有当前版本号的paras应用于css和js文件的末尾: 两个问题:这会有效地打破缓存吗?由于参数表明这是动态内容,因此该参数会导致浏览器从不缓存该URL的响应吗? 问题答案: 参数表示查询字符串,因此浏览器将认为这是从到的新路径。因此导致它从文件而不是从缓存加载。如你所愿。 而且,浏览器将假定下次调用时