为什么感觉redis队列不如mysql稳定,容易丢数据,原因何在?-灵析社区

万码IY9FEO6U

目前的开发环境:php7.2 | thinkphp 1.用mysql实现的架构: 生产者:大量数据先存入mysql中间表(mysql中间表用唯一索引约束唯一性) 多个消费者:循环从mysql中间表中取数据,进行计算后存入mysql结果表 2.用redis实现的架构: 生产者:大量数据先进入redis集合(为了保证重复数据不入队列),确定能进入集合的数据再塞入redis队列 多个生产者:循环从redis队列中取数据,每取一条数据后将该数据从redis集合中删除,对数据进行计算,计算后的数据存入mysql结果表 两种架构在实际使用中发现,用纯mysql的方式实现,结果数据很稳定,没有出现丢失的情况。 而用redis的方式实现,会发现存在数据丢失的情况(即结果表里缺少数据),而且还找不到数据丢失的原因,trycatch和redis日志均无问题。用redis集合加redis队列作为中间过度的方式为什么会不稳定?原因在哪里?

阅读量:132

点赞量:0

问AI
首先要了解为什么要用redis,如果你司业务量不大的话,直接走mysql这个方案倒是最优解。 那么业务量大的时候,这个时候磁盘IO就体现出缺点了,跟内存IO压根差了几个数量级。用redis是为了缓解瞬发大量的写入。 其次你说的丢数据,指的是redis服务挂了,然后持久化策略的局限,有些内存数据没来得及持久化到磁盘。正常情况下运行,只要代码没bug,不存在丢数据。