您好,今天小爱来为大家解答以上的问题。redis lua脚本相信很多小伙伴还不知道,现在让我们一起来看看吧!

redis lua脚本 redislua脚本原理redis lua脚本 redislua脚本原理


redis lua脚本 redislua脚本原理


1、业务场景: redis数据切换到Oracle,取消持久化,redis只做缓存具体需求: 从redis从库里获得了400w个无过期时间的hashkey,需要在主库中将其删除1.如果直接批量删除会导致redis拥塞,影响正常业务2.如果每删除一个key,sleep50ms,不会影响业务,但是根据经验要跑两天最终问题: 在不影响性能的情况下,怎么快速批量删除redis数据?Redis删key删得飞快,400w也不在话下。

2、我怀疑其实瓶颈在于网络。

3、如果你是一个一个key删的,每次发送一个命令都会导致客户端等待redis的回复,浪费了大量网络带宽。

4、可以试试用pipelinin例如删除 old-fashioned: 开头的所有 KEYg/transactions。

5、在不饱和redis端网络带宽的前提下,以速度发送命令,然后一次执行。

6、如果这都不行的话,可以写一个Lua脚本,识别并删除无用的key,发送到redis用eval执行。

7、这样应该不会阻塞网络。

8、如果这样还是影响业务的话。

9、解决方案是创建一个/sle,在sle上删除key,而将请求用处理。

10、删完key之后把sle晋升成,再将请求转向它。

11、2014年07月24日回答 滕亦飞1.3k尝试下 red矛盾点:is 的 eval 命令。

12、eval "redis.call('del', unpack(redis.call('keys','old-fashioned:')))" 0 如果单次删除性能消耗大,可以考虑分批删除。

本文到这结束,希望上面文章对大家有所帮助。