Redis是一个由C语言开发的数据库。为了避免使用MySQL要求过度影响性能,它将被使用。Mysql和redis数据在高并发场景中的一致性不容忽视。

MySQL和Redis缓存的一致性。
场景:线程A,修改数据,线程B使用数据。
1.双删策略:线程A写数据时,先删除redis数据,然后修改mysql,再删除redis数据。
问题:线程A修改mysql时,线程B先读取数据,然后执行线程A。此时redis中没有数据,然后线程B处理业务,然后设置redis缓存。此时,redis中的数据仍然是线程A修改前的数据。
2.延迟双删策略:线程A写数据时,先删除redis数据,然后修改mysql,再延迟一个业务时间后删除redis数据。
问题:该策略不能包括延迟时间;并影响系统的处理能力。
3.读写串行化:只要读写并发,就必然存在数据一致性问题。要彻底解决这个问题,就要串行。这种方法会影响效率,如果采用,可以做压力测试。
分布式锁的使用:影响效率。
使用队列:将操作同一资源的请求输入同一队列。
四、cancel:同步mysql的bin_log,更新redis。这种方法也会有延迟。
五、redis设置故障时间。

MySQL和Redis缓存的一致性。
场景:线程A,修改数据,线程B使用数据。
1.双删策略:线程A写数据时,先删除redis数据,然后修改mysql,再删除redis数据。
问题:线程A修改mysql时,线程B先读取数据,然后执行线程A。此时redis中没有数据,然后线程B处理业务,然后设置redis缓存。此时,redis中的数据仍然是线程A修改前的数据。
2.延迟双删策略:线程A写数据时,先删除redis数据,然后修改mysql,再延迟一个业务时间后删除redis数据。
问题:该策略不能包括延迟时间;并影响系统的处理能力。
3.读写串行化:只要读写并发,就必然存在数据一致性问题。要彻底解决这个问题,就要串行。这种方法会影响效率,如果采用,可以做压力测试。
分布式锁的使用:影响效率。
使用队列:将操作同一资源的请求输入同一队列。
四、cancel:同步mysql的bin_log,更新redis。这种方法也会有延迟。
五、redis设置故障时间。