一般场景下数据库和redis的同步机制:

针对有请求来读取数据库的场景:

 但是如果有想要修改数据库内容的场景该怎么保持同步呢?

在我们访问redis时,redis中的数据可能不是热点数据,即此时数据库的更新操作已经完成,但是还没有同步到redis中。

解决方案--延时双删 延时双删方案执行步骤 1.删除redis 2.更新数据库 3.延时500毫秒 4.删除redis

为什么要延时呢?

因为 mysql 和 redis 主从节点数据不是实时同步的,同步数据需要时间。

数据工作的大致流程:

服务节点删除 redis 主库数据。服务节点修改 mysql 主库数据。服务节点使得当前业务处理 等待一段时间,等 redis 和 mysql 主从节点数据同步成功。服务节点从 redis 主库删除数据。当前或其它服务节点读取 redis 从库数据,发现 redis 从库没有数据,从 mysql 从库读取数据,并写入 redis 主库。

缺点

延时双删,有等待环节,如果系统要求低延时,这种场景就不合适了。延时双删,不适合“秒杀”这种频繁修改数据和要求数据强一致的场景。延时双删,延时时间是一个预估值,不能确保 mysql 和 redis 数据在这个时间段内都实时同步或持久化成功了。

总结

延时双删用比较简洁的方式实现 mysql 和 redis 数据最终一致性,但它不是强一致。延时,是因为 mysql 和 redis 主从节点数据同步不是实时的,所以需要等待一段时间,去增强它们的数据一致性。延时 是指当前请求逻辑处理延时,而不是当前线程或进程睡眠延时。mysql 和 redis 数据一致性是一个复杂的课题,通常是多种策略同时使用,例如:延时双删、redis 过期淘汰、通过路由策略串行处理同类型数据、分布式锁等等

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。