1.使用背景
redis集群,每个key带有一个副本,经常在更新数据时,程序出现卡顿。
2.原因分析
1.单机Redis:所有的数据都保存在一个机器上,使用rename覆盖原有值时不会影响。
2.集群Redis:所有的数据分布在多台机器上(设置了副本),使用rename覆盖原有值时,当原有值和新值不在一个机器上,涉及到不同服务器之间数据的拷贝,此时访问数据可能会卡住。
3.解决办法
原先处理:
如上图所示,处理流程为新建一个key2,数据为value2,我们删除key1和value1,然后重命名key2为key1,数据为value2。
现在处理:
思路:我们通过一个中间key2来实现原有数据的更新。
更新数据:我们新建一个key2,新数据为value2,我们把key1的value值设为key2,value1设置一个过期时间。
查询数据:我们通过key1得到值key2,通过key2获取真实的数据value2。
大家可以关注我的公众号:不知风在何处,相互沟通,共同进步。