应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。

同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。

这样处理,主要是实时读写redis,而mysql数据则通过队列异步处理,缓解mysql压力,不过这种方法应用场景主要基于高并发,而且redis的高可用集群架构相对更复杂,一般不是很推荐。

redis如何做到和mysql数据库的同步

【方案一】

http://www.zhihu.com/question/23401553?sort=created

程序实现mysql更新、添加、删除就删除redis数据。

程序查询redis,不存在就查询mysql并保存redi

redis和mysql数据的同步,代码级别大致可以这样做:

读: 读redis->没有,读mysql->把mysql数据写回redi

写: 写mysql->成功,写redis(捕捉所有mysql的修改,写入和删除事件,对redis进行操作)

【方案二】

http://www.linuxidc.com/Linux/2015-01/380.htm

实时获取mysql binlog进行解析,然后修改redi

MySQL到Redis数据方案

无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。

那么理论上我们也可以用同样方式,分析MySQL的binlog文件并将数据插入Redis。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的。

因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQL UDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP Gearman Worker,将数据同步到Redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作。

【方案三】

使用mysql的udf,详情请看MySQL :: MySQL 5.1 Reference Manual :: 22.3 Adding New Functions to MySQL 然后通过trigger在表update和insert之后进行函数的调用,写入到redis中去。大致是这个样子。

【http://www.zhihu.com/question/27738066】

1.首先明确是不是一定要上缓存,当前架构的瓶颈在哪里,若瓶颈真是数据库操作上,再继续往下看。

2.明确memcached和redis的区别,到底要使用哪个。前者终究是个缓存,不可能永久保存数据(LRU机制),支持分布式,后者除了缓存的同时也支持把数据持久化到磁盘等,redis要自己去实现分布式缓存(貌似最新版本的已集成),自己去实现一致性hash。因为不知道你们的应用场景,不好说一定要用memcache还是redis,说不定用mongodb会更好,比如在存储日志方面。

3.缓存量大但又不常变化的数据,比如评论。

4.你的思路是对的,清晰明了,读DB前,先读缓存,如果有直接返回,如果没有再读DB,然后写入缓存层并返回。

5.考虑是否需要主从,读写分离,考虑是否分布式部署,考虑是否后续水平伸缩。

6.想要一劳永逸,后续维护和扩展方便,那就将现有的代码架构优化,按你说的替换数据库组件需要改动大量代码,说明当前架构存在问题。可以利用现有的一些框架,比如SpringMVC,将你的应用层和业务层和数据库层解耦。再上缓存之前把这些做好。

7.把读取缓存等操作做成服务组件,对业务层提供服务,业务层对应用层提供服务。

8.保留原始数据库组件,优化成服务组件,方便后续业务层灵活调用缓存或者是数据库。

9.不建议一次性全量上缓存,最开始不动核心业务,可以将边缘业务先换成缓存组件,一步步换至核心业务。

10.刷新内存,以memcached为例,新增,修改和删除操作,一般采用lazy load的策略,即新增时只写入数据库,并不会马上更新Memcached,而是等到再次读取时才会加载到Memcached中,修改和删除操作也是更新数据库,然后将Memcached中的数据标记为失效,等待下次读取时再加载。

转载于:https://www.cnblogs.com/rinack/p/9667457.html

如何使用Redis做MySQL的缓存相关推荐

  1. Redis集群——利用Gearman在Lnmp架构中做MySQL的缓存服务器

    一.概述 Redis的集群主要是使用切片技术来搭建的,简单来说就是把所有KEY分散存放到不同的redis节点上(不要把鸡蛋都放在一个篮子里). 1. 集群基本原理 Redis集群中内置了16384个槽 ...

  2. redis配置mysql缓存_Redis做mysql的缓存服务器

    一redis简介:redis 是一个高性能的 key-value 数据库. redis 的出现,很大程度补偿了memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很好 ...

  3. Redis 作 mysql 的缓存服务器及redis的高可用

    Redis 作 mysql 的缓存服务器 1.安装 lnmp 环境,安装以下软件包: nginx php php-fpm php-cli php-common php-gd php-mbstring ...

  4. 怎样将redis写入mysql_使用redis做mysql缓存

    应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...

  5. redis写入mysql 使用redis做mysql缓存

    应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...

  6. redis做mysql缓存的优点_面试官:如何保障数据库和redis缓存的一致性

    随着互联网的高速发展,使用互联网产品的人也越来越多,团队不可避免得也会面对越来越复杂的高并发业务场景(如下图),比如热点视频/文章的观看(读场景),热点视频/文章的评论,点赞等(写场景). 众所周知, ...

  7. Spring Boot中的缓存支持(二)使用Redis做集中式缓存

    上一篇介绍了在Spring Boot中如何引入缓存.缓存注解的使用.以及EhCache的整合. 虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各 ...

  8. Redis 整合spring ,做mysql的缓存

    项目环境: 在SpringMVC + MyBatis + Mysql.Redis部署在Linux虚拟机. 1.整体思路 参考Ehcache实现MyBatis二级缓存代码(Maven引用对应jar查阅) ...

  9. MySQL与Redis数据库结合——redis作为mysql的缓存服务器,实现读写分离(nginx+php+redis+mysql)

    文章目录 一.读写分离的背景 二.搭建nginx+php+redis+mysql 实验环境 实验 1.在server1上安装nginx+php 建立php和redis,mysql的连接 2.在serv ...

最新文章

  1. 白盒测试各种“覆盖”间的拓扑关系及白盒用例常用要求
  2. NSArray、NSMutableArray和NSMutableDictionary的用法
  3. java定时任务,每天定时执行任务
  4. 【数据分析】2020年创业公司到底过得怎么样?数据分析来为你揭晓
  5. B~树(B-Tree)与B+树
  6. 联想服务器asp配置文件,.NET Core读取配置文件方式详细总结
  7. Mac新手使用技巧,键盘键位分布和快捷键
  8. 64位WIN7上成功安装theano,并运行了g++, GPU
  9. SN65HVD888DR应用 TPS61170DRVR中文资料_1.2A 转换器
  10. 深度学习目前的局限性之AI识别彻底懵逼!这到底是「牛」还是「鲨」?
  11. 关于校园招聘 - 秋招和春招
  12. C++ Socket网络编程
  13. http协议各个版本之解说
  14. TAGS::Vim进阶索引[7]
  15. 城市规划数据—武汉市全部矢量+乡镇边界+POI数据
  16. targetSdkVersion 从22提到25 你需要知道的一切
  17. hana 表空间_hana数据库命令
  18. OTB Benchmark 学习(下载链接、评价指标、配置)
  19. Android:Frament详解
  20. c语言大作业开题报告,c语言开题报告

热门文章

  1. React 与 可视化
  2. 使用vs自带的性能诊断工具
  3. 多米诺骨牌v.1MEL语言
  4. softmax函数与交叉熵损失函数
  5. IOS 应用中从竖屏模式强制转换为横屏模式
  6. 【跃迁之路】【651天】程序员高效学习方法论探索系列(实验阶段408-2018.11.24)...
  7. OSChina 周四乱弹 —— 要成立复仇者联盟了,来报名
  8. 上班第一天(6)--一个程序员的成长史(15)
  9. What to call your Academic Event
  10. 安装配置 radicale