zoukankan      html  css  js  c++  java
  • Mysql与redis缓存一致性

    在高并发场景下单单使用mysql提供数据服务显然,是无法满足系统的吞吐量,目前的系统架构中我们一般会采用redis做数据缓存,以此避免请求过多的走数据库从而影响系统性能。但是在高并发场景下保持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、读写串行化:只要读和写是并发产生的就必然会存在,数据一致性问题。如果要彻底解决该问题,就要串行。该中方式会影响效率,如果采用可以做好压力测试。

    使用分布式锁:影响效率

    使用队列:将操作同一资源的请求,打到同一个队列中。

    4、cancel:同步mysql的bin_log ,更新redis。该方式也会存在延迟。

    5、redis 设置失效时间

    古之学者为己,今之学者为人
  • 相关阅读:
    MySQL监控全部执行过的sql语句
    Linux之网络编程:时间服务器
    人生哲理 |南怀瑾最经典的50句话
    TCP/IP协议(一)网络基础知识 网络七层协议
    Linux下进程通信之管道
    一个完整的项目管理流程
    Linux编程之select
    (笔记)电路设计(十四)之放大器的应用
    ds18b20采集温度并上报服务器
    java中基于swing库自定义分页组件
  • 原文地址:https://www.cnblogs.com/jalja365/p/14785491.html
Copyright © 2011-2022 走看看