如何批量删除Redis中数十万个带有特殊字符的key

2024-04-28

我们有一个包含数十万个 Redis 键的列表,其中包含各种特殊字符,我们希望批量删除它们。对于这个问题上的类似问题,有一些很好的答案:如何使用 Redis 自动删除与模式匹配的键 https://stackoverflow.com/questions/4006324/how-to-atomically-delete-keys-matching-a-pattern-using-redis/23399125#23399125

但是,我似乎无法找到以下情况的答案:

  1. 我们有大量的钥匙(数十万把)
  2. 这些键有各种特殊字符,如双引号 (")、反斜杠 ()、各种奇怪的 Unicode 字符等。
  3. 我们使用的是windows redis-cli客户端
  4. 额外好处:理想情况下,我们能够作为 MULTI/EXEC 事务的一部分发出此命令,这样我们也可以原子地删除 SET 以及密钥。

如果我们可以做如下的事情,但让它处理带有所有会导致 Redis 问题的特殊字符的键,我会很高兴:

redis-cli SMEMBERS "myGiganticListOfKeys" | xargs --delim='\n' redis-cli DEL

不幸的是,这只会给出以下错误:

"C:/Program Files (x86)/Git/bin/xargs.exe": redis-cli: Bad file number

我认为如果我们的按键中没有特殊字符,这会起作用。

预先非常感谢。


这是我解决这个问题的方法,这适用于无数的记录,而不会给 Redis 带来压力。

WARNING: PLEASE DO NOT TRY THIS AT HOME UNATTENDED AND MAKE SURE TO WEAR 
ALL SAFETY EQUIPMENT NECESSARY FOR THE TASK.

Step 1.将您需要的所有密钥从 Redis 转储到一个文件,我们调用这个文件YES_WE_CAN.sh

redis-cli KEYS "StartsWith*" > YES_WE_CAN.sh

Step 2:使用 vi 或 vim 打开文件 YES_WE_CAN.sh 并按:字符,然后键入以下内容来替换特殊字符':

:%s/'/'"'"'/g

这将取代所有'字符与'"'"'转义序列。(相信我,这有效,继续!)

Step 3:附加到每个字符串之前redis-cli DEL(不要忘记最后的空格):

:%s/^/redis-cli DEL /g

Step 4:在每行末尾附加'特点:

:%s/$/'/g

Step 5:保存文件并退出使用:wq

Step 6:更改文件YES_WE_CAN.sh到可执行模式:

chmod +x YES_WE_CAN.sh

Step 7:运行文件:

./YES_WE_CAN.sh

一边享受咖啡,一边让脚本删除您请求的数百万个密钥。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何批量删除Redis中数十万个带有特殊字符的key 的相关文章

  • Redis - 考虑重命名其中一个 bean 或通过设置 spring.main.allow-bean-definition-overriding=true 来启用覆盖

    我正在开发Spring Boot Spring Data Redis例子 在此示例中 我正在开发以下代码RedisMessageListenerContainer并在这里定义相应的bean 现在 当我运行该应用程序时 出现以下错误 有人可以
  • 带 Java 客户端的键值数据库

    我基本上想在磁盘上存储一个哈希表 以便以后可以查询它 我的程序是用Java 编写的 哈希表从字符串映射到列表 那里有很多键值存储 但经过大量研究 阅读后 尚不清楚哪一个最适合我的目的 以下是一些对我来说很重要的事情 简单的键值存储 允许您使
  • 连接到 localhost:6379 时出现错误 99。无法分配请求的地址

    设置 我有一个虚拟机 并在虚拟机中运行三个容器 一个 nginx 代理 一个非常简约的 Flask 应用程序和 redis Flask 应在端口 5000 上提供服务 而 redis 应在 6379 上提供服务 这些容器中的每一个都可以作为
  • AWS Redis 从外部连接

    有没有办法从外部 AWS 网络连接 AWS 上托管的 Redis 实例 我有一个基于 Windows 的 EC2 实例在 AWS 上运行 另一个是 Redis 缓存节点 我知道有人问过这个问题 但答案是在基于 Linux 的系统中 但我的是
  • Redis 块推送直到列表有空位

    我正在寻找类似的东西BLPUSH该命令将阻塞 直到列表的长度低于指定值max size 目的是防止生产者运行速度快于消费者时列表无限增长 功能与 python 非常相似Queue put https docs python org 3 li
  • python 3.5 中的 json.loads 和 Redis

    我使用 json dumps 创建了一个 JSON 对象 并在 Redis 列表中将其 RPUSH ed 当使用 LRANGE redis lrange 返回 JSON 时 我收到一个二进制字符串 b si 00 ff 所以 json lo
  • Stackexchange.redis 缺乏“WAIT”支持

    我在客户端应用程序正在使用的负载均衡器后面有 3 个 Web API 服务器 我正在使用这个库来访问具有一个主服务器和几个从服务器的 Redis 集群 目前不支持 WAIT 操作 我需要此功能来存储新创建的用户会话并等待它复制到所有从属服务
  • 仅当尚未设置时才进行原子设置

    仅当尚未在 Redis 中设置时 是否有办法执行原子设置 具体来说 我正在创建一个像 myapp user user email 这样的用户 并且希望 Redis 在 user email 已被占用时返回错误 而不是默默地替换旧值 比如声明
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • Redis键空间事件不触发

    我有两个 Redis 客户端 在一个文件中我有一个简单的脚本设置并删除了 Redis 键 var redis require redis var client redis createClient 6379 127 0 0 1 client
  • 如何设置 Celery 以通过 ssl 与 Azure Redis 实例对话

    使用 的伟大答案 如何在microsoft azure上的django项目中配置celery redis https stackoverflow com questions 39616701 how to configure celery
  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • Docker-compose Predis 不通过 PHP 连接

    我正在尝试使用 docker compose 将 PHP 与 redis 连接 docker compose yml version 2 services redis image redis 3 2 2 php image company
  • 如果另一个键中的计数器低于零,则从集合中原子删除一个项目?

    雷迪斯2 0 3 在我的 Redis DB 中 我有一组项目 每个项目都有一个与其关联的计数器 MULTI SADD items set foo INCRBY items foo 10000 EXEC 新项目会以随机间隔添加到集合中 当用户
  • 通过 StackExchange.Redis 连接到 Redis Servier

    我尝试使用以下方法制作一个测试项目Redis https redis io服务器 通过 Virtual Box 安装在 Linux Ubuntu 虚拟机上 Linux 机器通过 Virtual Box 的桥接适配器与本地网络连接 Virtu
  • Redis发布/订阅:查看当前订阅了哪些频道

    我目前有兴趣查看我拥有的 Redis 发布 订阅应用程序中订阅了哪些频道 当客户端连接到我们的服务器时 我们将它们注册到如下所示的通道 user user id 这样做的原因是我希望能够看到谁 在线 目前 我在不知道客户端是否在线的情况下盲
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git

随机推荐

  • 打开文件对象的大小

    有没有办法找到当前打开的文件对象的大小 具体来说 我正在使用 tarfile 模块来创建 tarfile 但我不希望 tarfile 超过特定大小 据我所知 tarfile 对象是类似文件的对象 所以我想通用的解决方案会起作用 ls la
  • 测试方法的存在性

    我正在尝试使一些现有的 JS 向后兼容 如果一个方法不存在 我需要重写它 否则只返回现有的方法 这是我到目前为止的代码 this grid getDataSource function if getDataSource undefined
  • 使用useReducer时如何避免耦合?

    为了防止将回调传递给我正在使用的子组件useReducer反而 这避免了子组件在每个父渲染上重新渲染的问题 但缺点似乎是父组件和子组件之间的紧密耦合 通过紧密耦合 我的意思是子级需要明确了解父级定义的减速器所期望的操作的形状 例如 想象一个
  • C# 中是否有相当于 php array_merge 的函数

    如果不是 创建它的最佳方法是什么 注意 合并不仅仅是附加 它融合了相同的键 此功能存在于 List 元素上 在 C 中 数组是固定宽度的项 因此在不创建新数组的情况下无法修改大小 然而 列表却是另一回事 你可以做 List
  • 添加原始哈希以在 git rebase 上提交(使用新根)

    我有一个代码库 以前用 SVN 管理 但现在用 git 管理 当代码迁移到 git 时 历史记录就丢失了 我已经设法恢复 SVN 历史记录 https stackoverflow com questions 79165 现在我正在努力git
  • 如何使用 unarchivedObjectOfClass:fromData:error: 取消归档数据?

    我在用unarchiveObjectWithData从中取消存档数据NSUserDefaults它运行良好 但在 iOS 12 0 中已被弃用 Xcode 建议使用unarchivedObjectOfClass fromData error
  • 从字典返回类属性的数组

    Background 最近试图回答一个question https stackoverflow com q 58835358 9758194 我自己在想是否可以直接从字典项返回类对象属性的数组 Code Imagine TstClass作为
  • AJV自定义关键字验证

    我正在使用 AJV 库来验证我的 JSON 架构 我希望能够验证Startdate成为一个字符串 如果不是字符串 则应将其转换为N A 目前 它仅转换undefined to N A 但是 在这些情况下 它不会按预期工作 null gt 空
  • 在 Selenium Node JS 中打开 gecko 驱动程序的日志记录

    我目前正在使用Selenium 与 Node Js and FireFox并想打开日志记录功能壁虎司机 但我不确定如何 另外我还想知道在哪里可以找到日志 目前这是我实例化驱动程序的方式 var fOptions new firefox Op
  • .net 日历 - 使整个单元执行回发(可点击)

    我已经启动并运行了一个 net 日历 并从数据库中获取信息 默认情况下 天数会应用回发操作 我想做的是将该操作应用于整个单元格 这样用户就不需要仅单击文本链接 我是 dayRenderer 操作 我有以下行来尝试复制该操作 但第二个参数我不
  • 如何强制操作系统收回内存? (C++)

    在我的 C 代码中 我分配了大量内存来创建树 然后在每个节点中使用 删除 来释放内存 删除所有内容后 我检查操作系统使用的内存量 发现内存未释放 这是预期的 因为该进程不会立即将内存返回给操作系统 因为它仍然可能会再次使用它 问题是 我在删
  • 您可以通过 facebook graph api 来控制和定位页面帖子吗?

    Enabling post privacy gating in the Page s privacy settings allows creating of posts with separate Gating and Targeting
  • 不同程序集中的实体容器和模型生成

    我正在做一些重构 并尝试重用我生成的实体模型 我的应用程序有一些程序集 其中一个是我的外向公共类型 API 另一个包含提供程序的实现 例如日志 我想拆分实体和模型的生成 以便实体位于 API 程序集中 容器位于实现程序集中 这可能吗 有可能
  • 将base64转换为base62(不含特殊字符)

    我想在 URL 中传递河豚加密字符串 并希望像 base64 一样对其进行编码 但没有任何特殊字符 像 base62 这样的东西就很好 0 9a zA Z 所以我想做的是使用base64 encode 转换河豚加密字符串 并将base64
  • 如何使用不同的类和导入动态地使用 Python 日志记录来更改文件句柄

    我无法执行即时日志文件句柄更改 例如 我有3节课 one py import logging class One def init self txt logging debug Hey I m the class One and I say
  • WP7 上的 POST 请求

    我花了大约 6 个小时试图弄清楚如何在 WP7 中发出常规 POST 请求 我尝试了此处和许多其他地方发布的类似问题的答案 我还尝试了许多不同的 API POST 请求 它们都导致针对某一特定问题 远程服务器返回错误 NotFound 好像
  • 通过 CloudFlare 获取正确的访客 IP [重复]

    这个问题在这里已经有答案了 我正在使用其他人转售给我的 cPanel 这可能意味着我无法使用mod cloudflare 我想获取访问者的 IP 而不是 CloudFlare IP 我正在使用的代码部分 SERVER REMOTE ADDR
  • 让子进程等待直到收到父进程的信号

    我想从父级创建 N 个子级 我希望所有的孩子同时开始 一个功能 测量时间 因此 我将该函数放入信号处理程序中 当父级完成创建 分叉 所有子级时 它会向所有子级发送信号 使用kill children id 以让 make 开始 代码如下 但
  • 将多个子域映射到同一个 S3 存储桶

    有没有某种方法可以将多个 数千个 子域映射到一个 s3 存储桶 如果是这样 是否也可以将其映射到每个子域的存储桶中的特定路径 我希望 test1 example com 映射到 mybucket test1 test2 example co
  • 如何批量删除Redis中数十万个带有特殊字符的key

    我们有一个包含数十万个 Redis 键的列表 其中包含各种特殊字符 我们希望批量删除它们 对于这个问题上的类似问题 有一些很好的答案 如何使用 Redis 自动删除与模式匹配的键 https stackoverflow com questi