server1:192.168.1.11  安装nginx和php为用户提供服务访问入口

server3:192.168.1.13  安装mysql,存储数据

server2:192.168.1.12  安装redis作为缓存服务器,缓存mysql数据

注意:若PHP解析不了,需在第二行加入("content-type:text/html;charset=utf-8);)

一、搭建LNMP+Redis

1. server1安装nginx和php以及php相关插件

安装nginx

解压

tar zxf nginx-1.18.0.tar.gz

vim auto/cc/gcc   ###这一步是为了取消debug模式,比较省空间,可以不做

安装依赖

yum install -y pcre-devel zlib-devel

编译

./configure --prefix=/usr/local/nginx

安装

make && make install

安装php及相关插件  gearman(后面会用到,为了实现redis更新mysql内容)

配置nginx为系统服务

vim /usr/lib/systemd/system/nginx.service

软连接,将nginx配置文件连接到/etc下

ln -s /usr/local/nginx/conf/nginx.conf /etc/

修改nginx配置文件如下

vim /etc/nginx.conf

开启nginx测试

systemctl start nginx.service

浏览器测试访问

开启php,编写php页面测试

systemctl start php-fpm.service

浏览器测试访问

2. server2安装redis

上一篇讲过安装redis步骤,这里就跳过了,详情见

https://blog.csdn.net/Johnson_Marteest/article/details/116739038

打开redis

3. server3安装数据库

这里直接用官方yum源自带的mariadb

yum install -y mariadb-server

启动服务

systemctl start mariadb.service 

安全初始化

mysql_secure_installation  ###初始密码为空,直接回车即可

登陆数据库

mysql -uroot -p密码

授权

  1. grant all on *.* to redis@'%' identified by 'redhat';

  2. flush privileges;

二、编写php测试页面,创建测试数据

vim index.php

根据自己实际情况更改redis和mysql绑定的ip端口,创建对应的数据库,比如我这里是testdb,所以下一步,在mysql创建对应数据库,以及内容

use testdb
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES (1,'sven'),(2,'jim'),(3,'zhu'),(4,'wang'),(5,'ftd'),(6,'test'),(7,'test01'),(8,'test02'),(9,'test03');

测试

浏览器访问

这是第一次访问,redis中没有key,从mysql中缓存数据到redis

再访问

第二次访问,因为redis'中有key,所以直接从redis中获取数据

到此为止已经实现了redis缓存mysql数据,但如果mysql数据更新了,而redis不会去主动同步mysql数据,会造成redis缓存和mysql数据不同步。

解决方法:通过mysql触发器,当更新时触发同步,使得redis和mysql数据一致。

三、gearman实现mysql和redis同步
1. 介绍
Gearman是一个支持分布式的任务分发框架:

Gearman Job Server:Gearman核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后,会按顺序处理。
我们在最开始安装php插件时已经安装了gearman

下面要编写的mysql触发器,就相当于Gearman的客户端。

修改表,插入表就相当于直接下发任务。

通过lib_mysqludf_json UDF库函数将关系数据映射为JSON格式

再通过gearman-mysql-udf插件将任务加入到Gearman的任务队列中

最后通过redis_worker.php,也就是Gearman的worker端来完成redis数据库的更新。

2. 安装lib_mysqludf_json

先安装mariadb开发包,否则不支持udf(用户自定义函数)

yum install -y mariadb-devel

解压lib_mysqludf_json安装包并编译

gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c

将编译好的插件复制到mysql插件目录

cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
注册udf函数

CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';

3. 安装gearman-mysql-udf

获取安装包和相关依赖

yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel -y

yum install -y libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm

解压gearman-mysql-udf

tar zxf gearman-mysql-udf-0.6.tar.gz 

编译

./configure --with-mysql=/usr/bin/mysql_config --libdir=/usr/lib64/mysql/plugin/

安装

make && make install

注册函数

CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';

注册完成可以查看下mysql的函数

select * from mysql.func;

设置gearman的server,我们是在server1安装的gearman,所以这里填写server1的ip(gearman默认端口4730)

select gman_servers_set('192.168.1.11:4730');

可以打开server1的gearman,验证下端口

编写mysql触发器

use testdb
DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
  END$$
DELIMITER ;

查看定义的触发器

show triggers from testdb;

在server1编写gearman的worker

vim syncRedis_worker.php

运行这个php

nohup php syncRedis_worker.php &> /dev/null &

测试:

原来访问的数据

mysqll端更新数据

浏览器访问

可以看到,数据已经更新

访问redis,查看数据,已经更新为新数据

Redis作为MySQL缓存服务器的使用相关推荐

  1. 部署Redis作为mysql缓存实现读写分离

    1. redis+mysql缓存服务器实现读写分离 Redis其实就是说把表中经常访问的记录放在了Redis中,然后用户查询时先去查询Redis再去查询MySQL,确实实现了读写分离,也就是Redis ...

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

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

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

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

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

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

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

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

  6. docker 安装mysql、canal、redis实现redis和mysql缓存一致性

    一.canal介绍 Canal 是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件. 目前,Canal 主要支持了 MySQL 的 Binlog 解析,解析完成后才利 ...

  7. Redis 作为缓存服务器的配置

    转自:http://www.open-open.com/lib/view/open1419670554109.html# 随着Redis的发展,越来越多的架构用它取代了memcached作为缓存服务器 ...

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

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

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

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

最新文章

  1. Linux压缩和解压缩命令集
  2. idea没有RunDashboard解决办法
  3. asp子窗口读取父窗口数据_算法与数据结构基础 - 数组(Array)
  4. Symbol Mc1000 快捷键 的 设置 事件 开发
  5. php 获取key的位置,PHP获取当前所在目录位置的方法
  6. MouseOut与RollOut,MouseOver与RollOver
  7. pb实现简单计算器的思想_【python实用编程之简单矩阵计算器实现】GUI编程
  8. ubuntu上装texlive
  9. 【sampleDateFormat】对日期进行解析
  10. 耐得住寂寞,拥得了繁华
  11. 微信小程序投诉页面与交互设计
  12. 艾司博讯:拼多多直通车自动调价要不要开启
  13. 计算机科学家事迹,【CCF会员故事】计算机软件科学家谢涛:星辰大海,求思进取...
  14. 如何统计序列中元素的出现的频度
  15. mysql临时表索引_数据库查询优化——给临时表建索引
  16. C++中this的理解
  17. Alexa Echo智能家居接入
  18. 从苏宁电器到卡巴斯基(第二部)第27篇:我当高校教师的这几年 III
  19. 桌宠启动不了,提示日文java6报错等,解决方案
  20. 如何使用COleDateTime类获取昨天(前几天)的日期

热门文章

  1. Python数据结构与算法篇(五)-- 二分查找与二分答案
  2. 20060617个人日志(转:集美区关于2006年新录用毕业生签订就业协议书的通知)
  3. 凤凰端子EN45545-2标准执行R24或者R26
  4. 女友嫁人新郎不是我 印巴歌曲铃声 女友嫁人新郎不是我 印巴歌...
  5. android11升级手机,安卓11正式发布是怎么回事 哪些手机支持升级Android 11
  6. TEXlive+textmaker
  7. 微信小程序宽高百分百,解决页面仍然可滑动问题
  8. 【RPG黑暗之光】第二章· 角色创建
  9. 三人看《中国合伙人》电影感悟
  10. GandCrab勒索病毒就此销声匿迹了吗?