一.Redis 作 mysql 的缓存服务器

客户端通过访问apache服务,首次获取从mysql数据库中,之后就从redis中获取
php 的 redis 扩展提取码:1ykg

server1
1. 安装 lnmp 环境之web服务器,mysql拓展
yum install httpd php php-mysql.x86_64 -y
2. 安装 php 的 redis 扩展
yum install php-fpm-5.4.16-46.el7.x86_64.rpm  php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm php-pecl-redis-2.2.8-1.el7.x86_64.rpm
3. 创建 php 测试页面
cd /var/www/html
vim test.php
<?php$redis = new Redis();$redis->connect('172.25.2.2',6379) or die ("could net connect redis server");#      $query = "select * from test limit 9";$query = "select * from test";for ($key = 1; $key < 10; $key++){if (!$redis->get($key)){$connect = mysql_connect('172.25.2.3','redis','westos');mysql_select_db(test);$result = mysql_query($query);#如果没有找到$key,就将该查询sql的结果缓存到rediswhile ($row = mysql_fetch_assoc($result)){$redis->set($row['id'],$row['name']);}$myserver = 'mysql';break;}else{$myserver = "redis";$data[$key] = $redis->get($key);}}echo $myserver;echo "<br>";for ($key = 1; $key < 10; $key++){echo "number is <b><font color=#FF0000>$key</font></b>";echo "<br>";echo "name is <b><font color=#FF0000>$data[$key]</font></b>";echo "<br>";}
?>systemctl start httpd

4. 安装 lnmp 环境之redis
server2 redis
tar zxf redis-5.0.8.tar.gz
yum install gcc -y
cd redis-5.0.8/
make
make installcd utils/
./install_server.sh
vim /etc/redis/6379.conf70 bind 0.0.0.0/etc/init.d/redis_6379 restart

5. 配置 mysql
server3 mysql
yum install mariadb-server -y
systemctl start mariadb.service vim test.sql
use test;
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');mysql < test.sql



到这里,已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis
中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情
况。所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中

二.配置 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 数据库的更新

lib_mysqludf_json下载地址

1.安装 lib_mysqludf_json
server3
lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式。通常,数据库中的数据映射为 JSON 格式,是通过程序来转换的
yum install mariadb-devel.x86_64 gcc -y
unzip lib_mysqludf_json-master.zip
cd lib_mysqludf_json-master/
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.cMariaDB [(none)]> show global variables like 'plugin_dir';  #查看 mysql 的模块目录
cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/  #拷贝 lib_mysqludf_json.so 模块MariaDB [(none)]> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';  #注册 UDF 函数
MariaDB [(none)]> select * from mysql.func;  #查看函数



gearman-mysql-udf这个插件是用来管理调用 Gearman 的分布式的队列
gearman的依赖提取码: 6pu8

2.安装 gearman-mysql-udf
server3
yum install libgearman-devel-1.1.12-18.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm -y  #安装依赖
tar zxf gearman-mysql-udf-0.6.tar.gz
cd gearman-mysql-udf-0.6/
./configure --libdir=/usr/lib64/mysql/plugin/
make
make install注册 UDF 函数
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME
'libgearman_mysql_udf.so';
mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME
'libgearman_mysql_udf.so';
查看函数
mysql> select * from mysql.func;指定 gearman 的服务信息
MariaDB [(none)]> SELECT gman_servers_set('172.25.2.1:4730');


3. 编写 mysql 触发器(根据实际情况编写)
server3
vim test.sql
use test;
DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGINSET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));END$$
DELIMITER ;mysql < test.sql
MariaDB [(none)]> SHOW TRIGGERS FROM test;  #查看触发器

php 的 gearman 扩展
gearman软件包及依赖提取码: hyg4
php 的 gearman 扩展提取码: ttrg

server1
1. 安装 gearman 软件包及依赖
yum install libevent-devel-2.0.21-4.el7.x86_64.rpm gearmand-1.1.12-18.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm -y
systemctl start gearmand.service
yum install php-pecl-gearman-1.1.2-1.el7.x86_64.rpm -y  #安装 php 的 gearman 扩展

2.编写 gearman 的 worker 端
server1
vim worker.php
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');$redis = new Redis();
$redis->connect('172.25.2.2', 6379);  #redis端while($worker->work());
function syncToRedis($job)
{global $redis;$workString = $job->workload();$work = json_decode($workString);if(!isset($work->id)){return false;}$redis->set($work->id, $work->name);#这条语句就是将 id 作 KEY 和name 作 VALUE 分开存储,需要和前面写的 php 测试代码的存取一致。
}
?>
nohup php worker.php &  #后台运行 worker
3. 更新 mysql 中的数据
server3
mysql> update test set name='hello' where id=1;


刷新测试页面数据同步

当redis中的数据被删除或者数据过期,再次从mysql中缓存

redis+mysql相关推荐

  1. ssm radis mysql_从零开始搭建框架SSM+Redis+Mysql(一)之摘要

    从零开始搭建框架SSM+Redis+Mysql(一)之摘要 本文章为本人实际的操作后的回忆笔记,如果有步骤错漏,希望来信307793969@qq.com或者评论指出. 本文章只体现过程,仅体现操作流程 ...

  2. Java项目:在线淘房系统(租房、购房)(java+SpringBoot+Redis+MySQL+Vue+SpringSecurity+JWT+ElasticSearch+WebSocket)

    源码获取:博客首页 "资源" 里下载! 该系统有三个角色,分别是:普通用户.房屋中介.管理员.普通用户的功能:浏览房屋信息.预约看房.和中介聊天.申请成为中介等等.房屋中介的功能: ...

  3. Redis+Mysql模式和内存+硬盘模式的异同

    学习任何新知识,都是一个循序渐进的过程,从刚开始的懵懂无知,到简单熟悉,然后突然的彻悟,成果让人欣喜若狂,心情也会快乐很久. redis+mysql和内存+硬盘类似的地方 首先看图 首先,我们知道,m ...

  4. redis mysql 下载_redis 下载安装

    redis和mysql的区别? 我们都知道mysql是持久数据化存储,存储在磁盘当中的,会涉及到一些io,存储速度会较慢,这时候就出现了redis数据库,redis存储数据在内存当中,大幅度的提高了大 ...

  5. docker redis mysql_docker创建redis mysql 等服务

    一点感想 我觉得docker是个很牛逼的东西,牛逼在哪里? 首先不说,未来的服务部署的问题,从gitlab代码合并-->Jenkins集成-->k8s服务自动编排,这些自动化的东西很可能是 ...

  6. redis mysql原理_MYSQL MONGODB REDIS 同步原理以及高可用性对比

    MySQL 1.异步复制: 2.半同步复制:同步出现超时后会自动变回异步复制: MongoDB MongoDB的副本集是一组mongod进程的集合,提供冗余和高可用性.最小的的副本集包含(1个prim ...

  7. redis mysql windows_Redis+Mysql模式和内存+硬盘模式的异同

    学习任何新知识,都是一个循序渐进的过程,从刚开始的懵懂无知,到简单熟悉,然后突然的彻悟,成果让人欣喜若狂,心情也会快乐很久. redis+mysql和内存+硬盘类似的地方 首先看图: 首先,我们知道, ...

  8. sau交流学习社区--基于thinkjs+vue+redis+mysql+es6开发的周报企业管理系统weekly

    weekly 周报系统主要是node+vue+redis+mysql+es6,一个企业管理系统,企业员工汇报每周工作情况,以及完成情况,各级负责人可以查看和提醒相应未写周报人员. ,后端完全使用nod ...

  9. 基于Redis+MySQL+MongoDB存储架构应用

    摘  要: Redis+MySQL+MongoDB技术架构实现了本项目中大数据存储和实时云计算的需求.使用MongoDB切片的水平动态添加,可在不中断平台业务系统的同时保障扩容后的查询速度和云计算效能 ...

  10. Linux企业化运维--(7)redis服务之redis配置及主从复制、主从自动切换、集群、redis+mysql、gearman实现数据同步

    Linux企业化运维 实验所用系统为Redhat-rhel7.6. 目录 Linux企业化运维 Linux企业化运维--(7)redis服务之redis配置及主从复制.主从自动切换.集群.redis+ ...

最新文章

  1. 想做网络工程师不?最好学下Linux
  2. 因论文《致谢》走红全网的中科院博士,如今已是腾讯大佬!
  3. Error in eval(predvars, data, env) : object ‘**‘ not found
  4. java 搜索机制_Java爬虫搜索原理实现
  5. 【转载】一致性哈希算法(consistent hashing)
  6. 和日本萌妹一起读深度学习最新论文,阅读难度会降低吗?
  7. Android平台Qt开发入门教程
  8. Swift5版本以上自定义回调函数报错
  9. USB HID 协议
  10. 超级实用的设计类网址导航--一流设计导航
  11. python程序设计实验七_Python程序设计实验报告七:组合数据类型
  12. 将APP打包为IPA
  13. python day 1 homework 1
  14. 简单的jsp代码(登录界面)
  15. 什么是拖库,撞库和洗库
  16. 数模电路基础知识 —— 7. PN结与二极管的工作原理
  17. druid监控页面 关闭_druid-springboot-starter默认启用监控页面,公网项目可能外泄DB信息...
  18. 详解Django的Models(django基础四)
  19. 快速复现利用Log4j漏洞启动windows计算器
  20. word长公式不换行显示的方法

热门文章

  1. C语言入门---------划水你我他
  2. 网页登录时密码如何传输?
  3. 文摘:成人呈现期研究
  4. AI绘图实战(三):手绘出图机甲狂暴男 | Stable Diffusion成为设计师生产力工具
  5. 神经网络训练是什么意思,神经网络训练准确率
  6. R语言中的地理/投影坐标系统(下)[翻译]
  7. 产品三部曲(产品设计 )
  8. 中国商业地产投资专业展览会6月在京举办
  9. 提升店铺权重的方法,为店铺快速引流
  10. 华为机试HJ49:多线程