前言:在web服务端开发的过程中,redis+mysql是最常用的存储解决方案,mysql存储着所有的业务数据,根据业务规模会采用相应的分库分表、读写分离、主备容灾、数据库集群等手段。但是由于mysql是基于磁盘的IO,基于服务响应性能考虑,将业务热数据利用redis缓存,使得高频业务数据可以直接从内存读取,提高系统整体响应速度。

利用redis+mysql进行数据的CRUD时需要考虑的核心问题是数据的一致性。下面对读写场景的技术方案做个简单说明:

业务数据读操作流程:

业务数据更新操作流程:

这里采用了mysql数据更新成功后,直接删除redis中对应项的方式。目的是在保证一致性的过程中以mysql中数据为准,redis中的数据始终保持和mysql的同步。

有的方案在这里采用的是更新完mysql成功后,然后进行相应的更新redis中数据的操作。这里的问题是,要考虑到更新的操作可能是并发的,而写mysql和写redis是两个步骤,不是原子性的。例如有线程1和线程2同时进行写操作,执行顺序可能是如下的情况:

线程1写mysql->线程2写mysql->线程2写redis->线程1写redis

这样的话,结果变成了mysql的内容是线程2写入的,而redis的内容是线程1写入的,mysql和redis中的数据就不一致了,后续的数据读取都是错的。

而采用每次写完mysql后就清除redis的方式,就保证了写完后的读取必然会重新从mysql读取数据,然后写入redis。这样就保证了redis里的数据最终和mysql中是一致的,保证了数据的最终一致性。

redis+mysql读写方案的更多相关文章

  1. Redis架构演变与redis-cluster群集读写方案

    导言 redis-cluster是近年来redis架构不断改进中的相对较好的redis高可用方案.本文涉及到近年来redis多实例架构的演变过程,包括普通主从架构(Master.slave可进行写读分 ...

  2. 线上项目mysql、redis平滑迁移方案及步骤

    1.清晰系统内网及公网可达,CVM配置 2.迁移完整数据,项目部署,测试网络环境. redis:复制rdb文件mysql:xtrabackup备份3.确保项目正常运行,网络正常访问.项目对外接口及账户 ...

  3. Mysql读写分离与主从数据库设置方案

    Mysql读写分离与主从数据库设置方案 亿仁网 18-10-0711:31 Mysql无非四个功能:增,删,改,读.而将增删改和读分离操作.这样有利于提高系统性能.下面是非常直观的操作: 1.配置: ...

  4. Redis缓存和MySQL数据一致性方案(转)

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  5. 数据库应用之--Redis+mysql实现大量数据的读写,以及高并发

    一.开发背景 在项目开发过程中中遇到了以下三个需求: 1. 多个用户同时上传数据: 2. 数据库需要支持同时读写: 3. 1分钟内存储上万条数据: 根据对Mysql的测试情况,遇到以下问题: 1. 最 ...

  6. 大厂们的 redis 集群方案

    redis 集群方案主要有两类,一是使用类 codis 的架构,按组划分,实例之间互相独立: 另一套是基于官方的 redis cluster 的方案:下面分别聊聊这两种方案: 类 codis 架构 这 ...

  7. mongodb,redis,mysql的区别和具体应用场景

    一.MySQL 关系型数据库. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,mysql的份额页在持续增长. 缺点就 ...

  8. Redis集群方案(来自网络)

    参考: https://www.zhihu.com/question/21419897 http://www.cnblogs.com/haoxinyue/p/redis.html 为什么集群? 通常, ...

  9. mongodb,redis,mysql的区别和具体应用场景(转)

    一.MySQL 关系型数据库. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,mysql的份额页在持续增长. 缺点就 ...

随机推荐

  1. codeforces 762E(cdq分治)

    题意: n个电台,每个电台有三个属性xi, ri, fi.分别代表电台的坐标,电台的播报范围,以及播报的频率. 对于一对电台i, j,若min(ri, rj) >= |xi - xj|,那么他们 ...

  2. Canon iP2780/iP2788 清零软件

    http://www.drvsky.com/driver/iP2780_Tools.htm http://www.dyjqd.com/soft/6085.html#download http://v. ...

  3. html自动换行

    对于div,p等块级元素 正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义的宽度之后自动换行html css 1.(IE浏览器)连续的英文字符和阿拉伯数 ...

  4. ovs ml2

    用openvswitch + ml2 构建vlan类型的tenant/project 网络 配置ml2 和 openvswitch_agent 配置 /etc/neutron/plugins/ml2/ ...

  5. 我的arcgis培训照片10

    来自:http://www.cnblogs.com/gisoracle/p/4297439.html

  6. Python学习系列之面向对象

    概述 一.Python编程方式 面向过程编程:根据业务逻辑从上到下磊代码 面向函数编程:将某功能代码封装到函数中,将来直接调用即可,无需重新写 面向对象编程:对函数进行分类.封装 二.面向过程编程 w ...

  7. AutoCAD如何打印

    现在有一个CAD图纸,左侧为房型图,右侧为规划好之后的图纸,我只要打印右侧的东西.点击文件-打印   在打印设备中选择Default Windows System Printer,名称的下拉菜单下面有 ...

  8. APP漏洞自动化扫描专业评测报告

    一.前言 目前在业界有很多自动化检测APP安全性的在线扫描平台.为了了解目前国内移动APP在线漏洞扫描平台的发展情况,我进行了一次移动安全扫描平台的评测分析:主要从漏洞项对比.扫描能力对比以及扫描结果 ...

  9. StringBuffer疑问

    为何结果为AB.B? public static void main(String[] args) { StringBuffer a=new StringBuffer("A"); ...

  10. IDEA启动Tomcat报错

    Maven编译成功, 可是启动Tomcat报错: Application Server was not connected before run configuration stop, reason: ...