目录

1.redis结合mysql

2.实验前准备

3.实验:redis与mysql结合

4.自动同步

5.实验前准备

6.实验


1.redis结合mysql

由于目前互联网巨大的访问量,在生产环境中常常需要redis结合mysql来用,如下图例,
我们可以将redis当作mysql的缓存,应用(app)所有读的操作都负载到redis上,因为redis够快,如果直接从mysql上读会对它造成巨大的压力,之前的mysql主从复制同样也是为了解决这样的问题,如果redis中没有想要的内容再从mysql中读并把读到的内容缓存到redis中。但是现在存在一个问题:当应用执行update操作时,就是往mysql中添加内容时,这时候redis无法完成更新,并且mysql无法将更改传递到redis中,因为二者的数据结构不同并且没有专门的连接端口,这时候我们该如何解决呢?
第一种传统的方式:在mysql中事先定义好触发器,通过udf(用户自定义函数)将mysql数据做映射,比如说将其映射为json数据,json数据可以跨平台传输,因此可以将json文件传递给redis从而完成数据的同步。但是这种方式从根本上是对mysql做操作,相当于给数据库创建函数对象,这种操作对数据库的侵入度是比较高的
第二种方式是:目前比较主流的,阿里开发的canal应用,它直接伪装成mysql slave的身份来对mysql进行复制,相当于mysql主从复制,然后通过事先准备好的javaclient将数据同步到redis,由于主从复制是mysql本身的功能,通过mysql主从复制协议实现的,因此侵入mysql数据库的程度更小


2.实验前准备

server2:需要提供redis

server3:需要php组件

server4:需要MySQL

检测php是否可用server4 


3.实验:redis与mysql结合

配置mysql数据库

scp test.sql server4: ##将测试数据复制到mysql主机中 mysql < test.sql ##测试数据导入数据库grant all on test.* to redis@'%' identified by 'westos'; ##授权远程用户连接

检测redis与mysql是否建立连接修改php配置文件test.php

将redis指向server2端;将MySQL指向server4端 第一次访问,redis中没有缓存,看不到数据库中相关内容

再次访问,已将mysql中相关内容缓存进redis中,可以访问到 

修改test组内容

mysql中更新后,redis并没有同步删除redis中的缓存,nginx自动将新的内容缓存进redis中。


4.自动同步

介绍

配置 gearman 实现数据同步:
Gearman 是一个支持分布式的任务分发框架:

Gearman Job Server:Gearman 核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker 接收到 Gearman Client 传递的任务内容后,会按顺序处理。
大致流程:下面要编写的 mysql 触发器,就相当于 Gearman 的客户端。修改表,插入表就相当于直接下发任务。然后通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,然后再通过 gearman-mysql-udf 插件将任务加入到 Gearman 的任务队列中,最后通过redis_worker.php,也就是 Gearman 的 worker 端来完成 redis 数据库的更新。

整体流程框图


5.实验前准备

下载依赖性

检查函数拷贝 lib_mysqludf_json.so 模块查看 mysql 的模块目录

gearman-mysql-udf用来管理调用 Gearman 的分布式的队列编译 

注册 UDF 函数解决依赖性问题 开启4730端口 指定gearman后台,负责接收mysql更改,但不负责处理,处理交给指定的worker


6.实验

客户提交update任务,然后触发器启动,通过触发器中定义的函数将数据同步到redis。

vim test.php查看触发器状态修改redis指向 开启gearman与redis 将php /usr/local/worker.php 打入后台  修改mysql内容 实现自动同步 

redis结合mysql、自动同步相关推荐

  1. mysql同步到redis_通过mysql自动同步redis

    在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库.这俩家 ...

  2. 使用Canal实现redis和mysql的同步

    使用Canal实现redis和mysql的同步 ### canal 工作思路 Canal 会将自己伪装成 MySQL 从节点(Slave),并从主节点(Master)获取 Binlog,解析和贮存后供 ...

  3. mysql自动同步数据_MySQL数据库实现双向自动同步

    [IT168 技术]本文将探讨如何通过MySQL数据库的高级特性,实现数据库的双向自动同步,确保数据的冗余与完整性.通过以往真实的项目实战与经验,把操作实施过程全部记录下来,主要有以下几个主要内容. ...

  4. solr mysql 自动同步_MongoDB和Solr的整合以及实现数据同步功能

    使用mongo-connector实现mongodb与solr数据同步: 1.solr搭建.这个我有记录,可以去找,这里不说了.(此次采用solr版本为4.7) 2.mongo搭建,要搭建集群,就是副 ...

  5. redis与mysql数据同步_Redis与MySQL数据同步解决方案

    数据库同步到Redis 我们大多倾向于使用这种方式,也就是将数据库中的变化同步到Redis,这种更加可靠.Redis在这里只是做缓存. 方案1 做缓存,就要遵循缓存的语义规定: 读:读缓存redis, ...

  6. Redis和Mysql数据同步的两种方案

    ** 利用数据库本身进行手动同步 ** 具体操作 在MySQL中对要操作的数据设置触发器Trigger,监听操作 客户端(NodeServer)向MySQL中写入数据时,触发器会被触发,触发之后调用M ...

  7. 让两个 mysql 自动同步_实现两个Mysql数据库之间同步的方案

    实现两个Mysql MySQL 为了实现replication 必须打开bin-log 项,也是打开二进制的MySQL 日志记录选项.MySQL 的bin log 二 进制日志,可以记录所有影响到数据 ...

  8. mysql 单向自动同步_mysql单向自动同步

    mysql自动同步 以下教程均使用mysql自带的自动同步功能 全库单向自动同步 本例把192.168.3.45上名称为ewater_main的数据库自动同步到192.168.3.68的ewater_ ...

  9. redis和mysql的异步更新

    redis和mysql如何同步: 一定要确定好master --------  (上次实验server3是master) 从真机中把lib_mysqludf_json-master.zip传给serv ...

最新文章

  1. 面试:如何决定使用 HashMap 还是 TreeMap?
  2. Android 开源框架 ( 十六 ) 视频播放器 --- JiaoZiVideoPlayer(JieCaoVideoPlayer)
  3. 小米五android o卡吗,【图片】小米5优化教程,吃鸡卡的进来!!!_小米5吧_百度贴吧...
  4. python人工智能-Python 人工智能应用快速入门 (一)
  5. android 英文帮助文档地址,使用android SDk帮助文档(英文) 下载中文SDK帮助文档(中文)...
  6. jvm字节码和基于jvm的多语言混合编程
  7. 传输设备,光端机的应用及故障分析
  8. 前端学习(3026):vue+element今日头条管理-让导航栏和路由对应起来
  9. 计算机一级发邮件发送多个抄送,计算机一级考试IE题和收发邮件模拟题.docx
  10. linux中时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
  11. 只怪自己当时年纪太小,一心只看那只泼猴了
  12. java io教程_Java IO教程
  13. StringUtils工具类常用方法
  14. QThread的用法:开启与退出
  15. 如何卸载twincat3_EtherCAT 基础之TwinCAT3安装
  16. cad的计算机功能,CAD的基本功能有哪些
  17. Python爬虫从入门到精通:(36)CrawlSpider实现深度爬取_Python涛哥
  18. 使用LaTeX表示数学方程(附源码)
  19. python字体类型arial_python-3.x - 为什么我的font.name属性不影响使用Python-pptx制作的ppt上的字体? 我总是得到arial字体 - 堆栈内存溢出...
  20. 怎么用网线连接开发板

热门文章

  1. python布尔表达式模板_使用OpenCV python从手绘逻辑门图中生成布尔表达式
  2. phpexcel中文手册
  3. 【感悟】女孩X与男孩Z
  4. 踩坑了!腾讯、网易必问的20道题Java面试题
  5. 嵌入式项目的开发经验
  6. 教幼儿园孩子计算机知识,幼儿园大班计算机课程教学计划
  7. 使用IDEA的Redis插件连接Redis服务器
  8. 买电脑时500G电脑硬盘为什么实际不足500G?
  9. office2019部署工具安装
  10. python 函数定义例题_python面试题练习题之函数