**redis:**内存型数据库(数据放在内存 AOF:增量更新 RDB:覆盖),有持久化功能,具备分布式特性,可靠性高,适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统。
**mysql:**数据放在磁盘,是关系型数据库,主要用于存放持久化数据,
redis和mysql的区别总结
类型上:从类型上来说,mysql是关系型数据库,redis是缓存数据库;
作用上:mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢;redis用于存储使用较为频繁的数据到缓存中,读取速度快
框架
client (server6): MySQL进行update操作,触发trigger。触发器会调用用户自定义udf函数json_object(用于转换数据,因为mysql与redis数据不兼容),之后把数据发给gearman(gman_server_set、gman_do_background)
server +worker(server4) :1.gearmand,监听4730端口
2. 用户端自己写的代码test.php(作用:从gearmand中获取任务,同步server2的redis)。php要求支持两个模块:gearman模块和redis模块。test.php首先会通过php-gearman模块获取任务,再通过php-redis模块更新redis server,以完成redis的更新。
环境部署
redis master (server2) -----缓冲层
将server2还原为master
可以正常读写
mariadb (server6)-----后台
nginx+php gearmand (server4)----前端
删除之前的mysql
安装php-fpm
后面所有的安装包都与此php版本相配
安装此模块
修改时区
设置组和用户
发现错误,php-fpm不能正常启动
检查了一圈错误,发现没有用户
确认有没有安装gcc make openssl-devel pcre-devel
gcc文件中去掉debug
安装nginx
测验test.php
说明test.php,服务端有问题
要连接redis和数据库,就可以访问
想要测试test.php,三台机子必须各自开启
编写server4中的显示页面文件
先添加test1–10
用于测试
导入test.sql
在redis上可以看到存的数据
删除后,页面刷新会再从mysql加载一遍,然后是redis
目前我们想redis更改一两个数据,从数据库中只需刷新一个就行,不需要全部刷新
异步更新
修改一下mysql中的 ID=1的数据
但是redis并没有同步修改,只有redis中把旧数据删了,才会重新从mysql中获取新的数据
redis 和mysql同步
mysql想要将变更数据传给远端,需要:
1、转换成json的数据结构
2、发布到分布式的分发系统上面
把.c文件编译到.so文件中
将.so拷贝到插件目录
注册函数
编译到插件目录
注册udf函数
CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
查看
指定gearman的服务信息
查看触发器
只要触发,就会通过gman_servers_set 发送到server4的4730端口。此端口相当于服务端,mysql提交给此端口,会继续下发给worker
测试
后台运行worker
始终是redis