多应用多请求(线程)下的Redis的数据一致性

在多应用多请求环境下,Redis的数据一致性成为挑战。文中描述了在执行LPUSH和LLEN操作时,由于其他线程的LPUSH操作导致数据丢失的问题。通过分析得出Redis虽单线程,但请求顺序可能导致预期外的读写操作。解决方案包括使用JIMDB的setNX实现分布式锁,并设置锁的过期时间来避免死锁。
摘要由CSDN通过智能技术生成

1.需求背景:

使用redis,开辟一个列表,不断往里面进行LPUSH操作。并且不断进行LLEN的长度读取,当长度大于某个阈值(本次举例:500)时,读取前500个元素,添加至CK中后,再进行LTrim删除。

2.问题描述:

经过多次排查,统计某一时段的数据量:累积98371次请求(1条请求 可以看做为 1条数据元素),最终落入CK中,只剩71643个元素。少了约2W条数据。

3.问题原由:

先上代码:

 

简化代码如下:

1.进行LLEN查询长度

2 .log.info(if判断外)

3.if(LLEN >=阈值){

4.   log.info(if判断内)

5.  LRange读取前500个元素

6.  删除LTrim前500元素

7.}

由此可见,当len=500的时

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值