【redis】批量删除redis集合中数据

今天在解决问题时,要批量删除redis中的一个集合中的数据。

想到要先备份数据再删除。操作方式如下:

备份数据:

echo "smembers smkey" | redis-cli -h you-host -a you-key -p 6379 -n 0  >> ./list.log

smkey中的数据就会自动写入到list.log文件中

删除数据:

redis提供了删除的方法srem Allianceblacklist  但每次只能删除一条,为了方便操作,我将删除语句写到一个文件del_list.log当中。

然后通过命令行执行这条语句

cat ./del_list.log | redis-cli -h you-host -a you-key -p 6379 -n 0

 

如果发现误删除了,还可以通过备份文件恢复,创建添加文件add_list.log

执行语句

cat ./add_list.log | redis-cli -h you-host -a you-key -p 6379 -n 0

Redis是一个开源的内存数据结构存储系统,用作数据库、缓存和消息间件。它支持多种类型的数据结构,如字符串、散列、列表、集合、有序集合等。当数据量达到千万级别时,进行批量删除可能会影响性能。以下是几种批量删除千万级数据的策略: 1. 使用Scan命令:由于Redis不支持直接使用`DEL *`来删除所有键,因为这会阻塞Redis服务器直到所有键被删除。所以可以使用Scan命令来逐步迭代并删除匹配的键。Scan命令可以返回一部分符合匹配模式的键,然后你可以对每个返回的键执行DEL命令。 ```bash SCAN cursor [MATCH pattern] [COUNT count] DEL key1 [key2 ...] ``` 2. 分批次删除:将需要删除的键分批次进行删除,可以减少单次操作对Redis性能的影响。例如,可以将键列表分成每批次1000个键,然后逐批次删除。 3. 使用Lua脚本:在Redis服务器端运行Lua脚本进行批量删除,可以减少网络往返次数。通过`EVAL`命令可以执行Lua脚本,并在一次网络调用完成多个删除操作。 ```lua local keys = redis.call('keys', 'pattern:*') -- 替换为实际的匹配模式 for i, key in ipairs(keys) do redis.call('del', key) end ``` 4. 使用pipeline:在Redis 2.6及以上版本,可以使用pipeline功能将多个命令打包在一起发送给服务器,这样可以减少网络延迟的影响。 ```bash MULTI DEL key1 DEL key2 ... DEL keyN EXEC ``` 在执行这些操作时需要注意以下几点: - 确保Redis服务器有足够的内存空间,以便在删除大量数据时不会造成内存溢出。 - 在生产环境删除操作可能会影响性能,最好在流量较低的时段进行。 - 如果数据存储在持久化配置的Redis,可能需要考虑持久化数据文件的大小以及删除操作可能对持久化性能的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值