最近做项目我也用到了redis的过期键消息通知,条件是这样的,用户扫码输入信息后,1分钟开始指导用户做另一个事,然后在过2分钟出一个结果,结束后,另一个用户继续填写,继续这种操作,同时同一时刻也会有很多个这个用户扫码完成这个任务,接着下一组,我的涉及就是用户填写信息后设置一个1分钟过期键,然后在设置一个3分钟的过期键去处理。 关键有一个问题就是,测试2000组,遇到了大概3次过期键丢失的现象。有没有更好的方案去解决
关注一下 我以前在业务上也有几次准备用key过期通知,就是怕丢失(实际没测过)。后来放弃了
@imhered 因为开发任务比较紧,所以想到这个当时也怕会丢失,实际使用的时候确实丢失了,所以就想问问社区有没有更好的解决方案
@wang-weifeng 其实我觉得吧,node做异步分片做的好,时间差不会太大,用setTimeout也没什么问题
@wang-weifeng redis的键消息通知采用的是发布即忘的策略,node单个实例有可能出现断线的情况,可以通过多个实例来提高可靠,但只需要一个实例来处理,这里的话考虑加锁或者算法。加锁可以考虑 ioredis-lock
@fightAndLearn 谢谢,我来看一下
LZ说的键到期通知丢失可能是因为Redis内存使用超过设置的maxmemory,那个键还没过期就直接被redis的近似LRU算法踢掉了,所以就没有到期通知了
@nullcc 根据的提示,我看了一下, 然后我看这边的信息是不是Redis 的内存消耗峰值大于了由 Redis 分配器分配的内存总量,造成了这个问题
可以用阿里云的 MQ 啊,发送定时消息。