关键词:
【中文标题】如何在 Redis 中批量删除数十万个带有特殊字符的键【英文标题】:How to bulk delete hundreds of thousands of keys with special characters in Redis 【发布时间】:2015-12-29 16:31:53 【问题描述】:我们有数十万个包含各种特殊字符的 Redis 键的列表,我们希望批量删除它们。对于这个问题的类似问题有一些很好的答案:How to atomically delete keys matching a pattern using Redis
但是,对于以下情况,我似乎找不到答案:
-
我们有大量的密钥(数十万个)
键有各种特殊字符,如双引号 (")、反斜杠 ()、各种奇怪的 Unicode 字符等。
我们使用的是 windows redis-cli 客户端
奖励:理想情况下,我们可以将此命令作为 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
我认为如果我们在键中没有特殊字符,否则这将起作用。
非常感谢。
【问题讨论】:
我对 Windows fork 并不熟悉,但如果它的 redis-cli 支持 --pipe 开关,您可以准备一个包含所有DEL <funnykeyname>
命令的文本文件并直接通过管道输入。
@RyanVincent 我们实际上有我们想要删除的键的确切列表——它们在一个集合中。问题是使用该集合(例如 SMEMBERS “myKeyName”)并在有大量数字时将其全部删除,并且键恰好具有特殊字符。
感谢@ItamarHaber 的想法,但即使它确实有效——我猜它不会因为我怀疑它与仅从 SMEMBERS mykeyName 提供的密钥列表有什么不同——它因为我们正在尝试编写一个可重用的 PowerShell 脚本来删除指定集中的所有键,所以这并不是非常实用。在此过程中创建一个临时文件然后清理它并不理想。不过还是谢谢。
@RyanVincent 没问题,我将上面的示例更改为使用 SMEMBERS 而不是通配符示例,以阐明我们要解决的实际问题。
所有导致 Redis 问题的特殊字符是什么意思?
【参考方案1】:
这是我解决它的方法,这适用于数以万计的记录,而不会对 redis 造成压力。
WARNING: PLEASE DO NOT TRY THIS AT HOME UNATTENDED AND MAKE SURE TO WEAR
ALL SAFETY EQUIPMENT NECESSARY FOR THE TASK.
第 1 步。 将您需要的所有密钥从 redis 转储到一个文件中,让我们将此文件称为 YES_WE_CAN.sh
redis-cli KEYS "StartsWith*" > YES_WE_CAN.sh
第二步:用vi或vim打开文件YES_WE_CAN.sh,按:
字符,然后输入以下内容替换特殊字符'
:
:%s/'/'"'"'/g
这会将所有'
字符替换为'"'"'
转义序列。 (相信我,这行得通,继续!)
第 3 步: 在每个字符串前面加上 redis-cli DEL
(不要忘记末尾的空格):
:%s/^/redis-cli DEL /g
第 4 步:在每行末尾附加 '
字符:
:%s/$/'/g
第5步:保存文件并使用:wq
退出
第 6 步: 将文件 YES_WE_CAN.sh
更改为可执行模式:
chmod +x YES_WE_CAN.sh
第 7 步:运行文件:
./YES_WE_CAN.sh
在脚本删除您请求的数百万个密钥的同时享受您的咖啡。
【讨论】:
【参考方案2】:您应该尝试使用更强大的客户端创建应用程序。 请参阅client list。 redis-cli 是一个非常基本的命令行实用程序,仅用于破解/玩 Redis。
我同意你的看法,最好的办法是重新设计你的键/值存储。
如果您需要使多个键失效,请考虑使用标记机制:在添加键时使用散列按标签对键进行分组,然后删除散列中的所有键使整个标记失效。
【讨论】:
这确实是我们要做的。谢谢。提高过滤可能包含数十万个元素的数组的效率
】提高过滤可能包含数十万个元素的数组的效率【英文标题】:Improvingontheefficiencyofmyfilteringofarrayswithpotentiallyhundredsofthousandsofelements【发布时间】:2021-12-2522:42:46【问题描述】:我有一个数字数组。我想在array1中找到不在array2中... 查看详情
在 BASH 中使用特殊字符从文件名中批量删除子字符串
】在BASH中使用特殊字符从文件名中批量删除子字符串【英文标题】:BatchremovesubstringfromfilenamewithspecialcharactersinBASH【发布时间】:2015-09-2400:21:00【问题描述】:我的目录中有一个文件列表:opencv_calib3d.so2410.soopencv_contrib.so2410.soope... 查看详情
如何在批处理文件中获取带有特殊字符的子字符串?
】如何在批处理文件中获取带有特殊字符的子字符串?【英文标题】:Howtogetasubstringwithspecialcharactersinbatchfile?【发布时间】:2020-07-2614:52:42【问题描述】:我正在尝试删除包含特殊字符的字符串的一部分。字符串看起来像:&l... 查看详情
如何批量删除redis中keys
在linux中批量操作redis中的keys的方法:1.统计个数:redis中名称含有OMP_OFFLINE的key的个数;src/redis-clikeys"*OMP_OFFLINE*"|wc-l2.批量删除批量删除0号数据库中名称含有OMP_OFFLINE的key:src/redis-cli-n0keys"*OMP_OFFLINE*"|xargssrc/redis-cl... 查看详情
如何在 iOS 中发送带有特殊字符的 JSON 字符串?
】如何在iOS中发送带有特殊字符的JSON字符串?【英文标题】:HowtoSendJSONStringwithSpecialCharatersiniOS?【发布时间】:2015-06-2518:23:31【问题描述】:我是iOS新手,我正在使用以下代码进行API调用。-(NSData*)sendDataToServer:(NSString*)url:(NSStrin... 查看详情
如何在 bash 中使用带有特殊字符的变量? [复制]
】如何在bash中使用带有特殊字符的变量?[复制]【英文标题】:HowdoIuseavariablewithspecialcharactersinbash?[duplicate]【发布时间】:2021-05-2508:17:14【问题描述】:我的bash脚本中有这个变量:var="\\\'?"\\"\'\\"但是当我输入echo$var时,我什么... 查看详情
如何在R中提取带有特殊字符的模式之间的字符串[重复]
】如何在R中提取带有特殊字符的模式之间的字符串[重复]【英文标题】:HowtoextractstringbetweentopatternswithspecialcharactersinR[duplicate]【发布时间】:2020-12-0608:24:33【问题描述】:从字符串a我想提取|Request|和下一次出现的|之间的所有内... 查看详情
如何在Objective C中使用XML解析发布带有特殊字符和泰语的字符串?
】如何在ObjectiveC中使用XML解析发布带有特殊字符和泰语的字符串?【英文标题】:HowtopoststringwithspecialcharacterandThaiLanguageusingXMLparsinginObjectiveC?【发布时间】:2017-09-1806:07:54【问题描述】:我是iOS新手,在发布包含特殊字符的字... 查看详情
如何在 vi 编辑器中搜索带有空格和特殊字符的字符串
】如何在vi编辑器中搜索带有空格和特殊字符的字符串【英文标题】:Howtosearchastringwithspacesandspecialcharactersinvieditor【发布时间】:2016-03-0607:55:40【问题描述】:我在vi编辑器中编辑。我想在文本中搜索特定短语,例如"Dec115:13:... 查看详情
如何在 PHP“回声”中插入带有撇号和其他特殊字符的文本? [复制]
】如何在PHP“回声”中插入带有撇号和其他特殊字符的文本?[复制]【英文标题】:HowtoinserttextwithapostropheandotherspecialcharactersinPHP"echo"?[duplicate]【发布时间】:2021-11-2620:48:55【问题描述】:我只能在echo\'\';撇号之间按原样... 查看详情
如何使用带有编解码器值的 python .replace 来删除特殊字符?
】如何使用带有编解码器值的python.replace来删除特殊字符?【英文标题】:Howtousepython.replacewithacodecvaluetoremovespecialcharacters?【发布时间】:2021-10-3107:03:22【问题描述】:我有一个从excel导入的数据框,该数据框在一列中的一个字... 查看详情
大量联系人的重复数据删除算法
】大量联系人的重复数据删除算法【英文标题】:DataDeduplicationalgorithmforlargenumberofcontacts【发布时间】:2013-10-1109:53:53【问题描述】:我正在开发一个应用程序,它必须能够在存储在sqlserver数据库中的数十万个联系信息中查找和... 查看详情
如何在python中读取带有特殊字符的文本文件(代码片段)
我正在尝试使用特殊字符读取文本文件,例如:الحمدللهربالعالمين我正在使用:importfileinputfileToSearch="test_encoding.txt"withopen(fileToSearch,'r',encoding='utf-8')asfile:counter=0;forlineinfile:print(line)但Python崩溃了这条消息:Tracebac 查看详情
使用 spark 从 csv 文件中删除所有特殊字符
...vfileusingspark【发布时间】:2019-01-0708:44:26【问题描述】:如何使用javaspark从spark数据帧中删除csv文件中的所有特殊字符例如:下面是带有空格和特殊字符的csv文件内容"UNITEDSTATESCELLULARCORP.-OKLAHOMA",WIRELESS, 查看详情
如何从字符串中删除特殊字符?
】如何从字符串中删除特殊字符?【英文标题】:howtoremovespecialcharacterfromstring?【发布时间】:2021-07-1208:41:59【问题描述】:我目前的情况是,我有一个像“XYZName”这样的字符串,但它应该只需要前3个字符,并且在这3个字符中... 查看详情
如何使用纯 Redis 原子地删除数百万个匹配模式的键?
】如何使用纯Redis原子地删除数百万个匹配模式的键?【英文标题】:HowtoatomicallydeletemillionsofkeysmatchingapatternusingpureRedis?【发布时间】:2020-08-0513:12:25【问题描述】:假设我有数百万个prefix:<numeric_id>键。我想以原子方... 查看详情
如何在一组字符串中删除 r 中的这些特殊字符:’s,…
】如何在一组字符串中删除r中的这些特殊字符:’s,…【英文标题】:Howtoremovethesespecialcharactersinrinasetofstring:’s,…【发布时间】:2022-01-1409:09:19【问题描述】:我有这个包含特殊字符的字符串,我无法从主数据框... 查看详情
十万个为什么
...外滩不到200米 衣:3月份轻薄羽绒服、毛衣 十万个为什么十万个草泥马十万个怎么办 我是谁,从哪儿来,到哪里去。。。 查看详情