redis的数据更新尝尝涉及到和数据库的数据一致性的问题的。最有效的redis数据库一致性的操作方式是如下的:
强调一点,redis不要直接做数据更新方案,存在问题的。redis不要直接对缓存数据执行更新操作。
1.先更新数据库;
2.删除缓存;
3.当再次查询的时候,查询缓存重建缓存就可以了;
上面还是存在一个缓存脏数据的问题的。可以使用乐观锁的方式来解决问题的。
下面是解决问题的整个的流程的:
上面的操作还存在一个问题的:
1.当更新数据库成功了,但是删除缓存数据失效了。这个时候可以使用kafka的方式来补偿删除redis的数据的。
这种情况下是这样的流程图的,可以采用定于mysql的binlog的方式来实现补偿消费订阅的。当时还是存在一个问题的。在补偿消费消费的期间,读取的缓存的数据还是脏数据的。
但是这样的话,会导致系统的复杂性大大的增加的。不是一个很好的方案的。是否需要为了一个错误的使用增加诸多的措施来保证完善了,我觉的是没有必要的。需要结合系统的特性来选择的。
对于那种要求实时性和准确性特别强的情况下,不建议使用redis来实现相关的操作的。能够使用redis的地方的话,肯定是那种能够允许存在数据不一致的地方的,因为redis的目标是保证最终一致性的。所以的话,对于读多写少的场景的话,推荐使用redis来完成的。
其中步骤4可以换成订阅mysql的binlog的方式发送消息到kafka中的。实现补偿消费数据的。
当然对于实时性和精度要求特别高的情况下,建议直接使用数据库完成相关的数据操作的。
所以:对于redis的使用,我的观点是如下的:
1.reids的使用场景:读多写少,并且对于数据的准确性要求要求不是特别苛刻的场景的;
2.redis的数据更新方式如下:先更新数据库,然后删除缓存的。删除缓存可以采用如下的方式,设置较短的缓存失效时间,或者是采用补偿的方式来删除redis缓存数据的。个人建议使用较短的redis缓存时间来解决这种脏数据的问题的。是一个比较理想的设计方案的。设置较短的缓存失效时间,可以满足大多数的业务场景了。
redis数据更新操作
最新推荐文章于 2025-04-22 18:10:36 发布