- 基本概念
Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要
在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令.
Redis 集群的优势:
自动分割数据到不同的节点上。
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
一、redis集群
1.server1将之前的redis关闭
[root@server1 ~]# /etc/init.d/redis_6379 stop
2.切换到/usr/local目录,创建一个rediscluster目录
[root@server1 ~]# cd /usr/local
[root@server1 local]# mkdir rediscluster
[root@server1 local]# ls
切换到新建目录rediscluster,再这个目录下创建6个子目录
[root@server1 local]# cd rediscluster/
[root@server1 rediscluster]# ls
[root@server1 rediscluster]# mkdir 700{1..6}
[root@server1 rediscluster]# ls
7001 7002 7003 7004 7005 7006
3.创建配置文件,让配置文件生效
[root@server1 rediscluster]# cd 7001
[root@server1 7001]# ls
[root@server1 7001]# vim redis.conf
[root@server1 7001]#
[root@server1 7001]# redis-server redis.conf
1 port 7001
2 cluster-enabled yes
3 cluster-config-file nodes.conf
4 cluster-node-timeout 5000
5 appendonly yes
6 pidfile "/usr/local/rediscluster/7001/redis.pid"
7 logfile "/usr/local/rediscluster/7001/redis.log"
8 daemonize yes
9 dir "/usr/local/rediscluster/7001"
查看进程可以看到,进程已经开启
[root@server1 7001]# ps ax
端口号也已经打开
[root@server1 7001]# netstat -tnlp
4.将7001编辑好的配置文件复制给每个目录中,修改相应的端口号和文件名
[root@server1 7001]# cp redis.conf ../7002/
[root@server1 7001]# cp redis.conf ../7003/
[root@server1 7001]# cp redis.conf ../7004/
[root@server1 7001]# cp redis.conf ../7005/
[root@server1 7001]# cp redis.conf ../7006/
每一个目录编辑完之后再当前目录生效配置文件
1 port 7002
2 cluster-enabled yes
3 cluster-config-file nodes.conf
4 cluster-node-timeout 5000
5 appendonly yes
6 pidfile "/usr/local/rediscluster/7002/redis.pid"
7 logfile "/usr/local/rediscluster/7002/redis.log"
8 daemonize yes
9 dir "/usr/local/rediscluster/7002"
5.查看进程
[root@server1 7006]# ps ax
6.切换到redis安装目录下,将src/redis-trib.rb文件复制到/usr/local/bin目录下,复制之后
redis命令可以自动补齐
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# cd src/
[root@server1 src]# ls
[root@server1 src]# cp redis-trib.rb /usr/local/bin
7.创建集群
[root@server1 ~]# redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
可以看到server1,server2和server3是master,对应的slave分别是server5,server6,server4
- 测试:
1.查看集群节点间对应关系
[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001
[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7002
[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7003
2.查看节点状态信息
[root@server1 ~]# redis-cli -c -p 7001
127.0.0.1:7001> info
上传信息之后自动转到7002
# Keyspace
127.0.0.1:7001> set name yan
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
127.0.0.1:7002> get name
"yan"
127.0.0.1:7002> quit
2.无中心检测
[root@server1 ~]# redis-cli -c -p 7005
127.0.0.1:7005> info
查看数据后又转到7002
# Keyspace
127.0.0.1:7005> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"yan"
127.0.0.1:7002> quit
3.将7002宕掉,对应的slave7006会接替
[root@server1 ~]# redis-cli -c -p 7002
127.0.0.1:7002> shutdown
not connected>
[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001
再将这个接替的master宕掉,集群会崩溃
[root@server1 ~]# redis-cli -c -p 7006
127.0.0.1:7006> shutdown
not connected>
[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001
[root@server1 ~]# redis-cli -c -p 7001
127.0.0.1:7001> get name
(error) CLUSTERDOWN The cluster is down
- 恢复集群:
重新加载7002和7006的配置文件即可
[root@server1 ~]# cd /usr/local/rediscluster/7002
[root@server1 7002]# ls
appendonly.aof dump.rdb nodes.conf redis.conf redis.log
[root@server1 7002]# redis-server redis.conf
[root@server1 7002]# cd ../7006
[root@server1 7006]# redis-server redis.conf
再次查看集群,已经恢复
[root@server1 7006]# redis-cli --cluster info 127.0.0.1:7001
查看节点信息状态,查看数据可以查看,查看后自动转到7006
[root@server1 7006]# redis-cli -c -p 7001
二、向已经存在的集群中添加节点
1.切换到/usr/local/rediscluster目录
[root@server1 ~]# cd /usr/local/rediscluster/
[root@server1 rediscluster]# ls
7001 7002 7003 7004 7005 7006
2.创建两个新的节点目录 7007 和7008
[root@server1 rediscluster]# mkdir 7007
[root@server1 rediscluster]# mkdir 7008
[root@server1 rediscluster]# ls
7001 7002 7003 7004 7005 7006 7007 7008
3.将7001的配置文件复制给两个新建的节点,编辑配置文件,拉起节点
[root@server1 rediscluster]# cp 7001/redis.conf 7007/
[root@server1 rediscluster]# cp 7001/redis.conf 7008/
[root@server1 rediscluster]# cd 7007
[root@server1 7007]# vim redis.conf
[root@server1 7007]# redis-server redis.conf
[root@server1 7007]# cd ../7008/
[root@server1 7008]# vim redis.conf
[root@server1 7008]# redis-server redis.conf
4.查看进程可以看到两个节点已经起来
[root@server1 7008]# ps ax
5.将节点添加进集群
[root@server1 7008]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
检查集群:显示7007已经在集群中,但是没有slave
[root@server1 7008]# redis-cli --cluster check 127.0.0.1:7001
6.将7008作为7007的slave端加入进集群
[root@server1 7008]# redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007
--cluster-slave --cluster-master-id cd59a5af9ac7fbd0674e1e9e3306e5a75ad5eda5
再次检查集群:7007和7008都加入到集群中,7007是master,7008是slave
[root@server1 7008]# redis-cli --cluster check 127.0.0.1:7001
7.查看集群信息,可以看到有四个master,每一个master都有一个slave,但是7007的哈希槽是0
[root@server1 7008]# redis-cli --cluster info 127.0.0.1:7001
- 给新添加的节点分配哈希槽
1.手动分配,想分配多少个就分配多少个,但由于集群节点中的哈希槽不相同可能会导致数据不一致,存储出问题
[root@server1 7008]# redis-cli --cluster reshard --cluster-from all --cluster-to
cd59a5af9ac7fbd0674e1e9e3306e5a75ad5eda5 --cluster-slots 300 --cluster-yes 127.0.0.1:7001
- 参数解释:
reshard | 表示手动分配 |
---|---|
–cluster-from all | 表示从所有的节点中截取哈希槽 |
–cluster-to | 表示截取的节点要分配到那里,这里写的是集诶但的id |
- 检查:
7007有300个哈希槽
[root@server1 7008]# redis-cli --cluster check 127.0.0.1:7001
2.平均分配,系统自动重新平均分配,分配后每一个master的哈希槽数量是一样的
[root@server1 7008]# redis-cli --cluster rebalance --cluster-threshold 1
--cluster-use-empty-masters 127.0.0.1:7001
检查:
[root@server1 7008]# redis-cli --cluster check 127.0.0.1:7001
测试:
查看7008结点的信息和状态
可以看到他是一个slave,他的master是7007
[root@server1 7008]# redis-cli -c -p 7008
127.0.0.1:7008> info
获取数据,可以查看到,查看完之后会自动跳转到7007
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
127.0.0.1:7008> get name
-> Redirected to slot [5798] located at 127.0.0.1:7007
"yan"
三、redis结合lnmp架构做mysql的缓存服务器
工作流程:client -> app -> redis -> mysql(如果在redis找不到数据在访问mysql) -> redis -> client
主机名 | IP | 服务 |
---|---|---|
server1 | 172.25.19.1 | nginx,php |
server2 | 172.25.19.2 | redis |
server3 | 172.25.19.3 | mysql |
- 将之前的集群中所有的节点都关掉
1.将server1替换掉,因为之前安装过nginx,mysql和redis,之前安装的openssl的库版本较低,我们接下来要做的饰演需要更高版本的openssl库,而之前的nginx已经将第版本的ssl编译进去,这会导致ssl升级不了,所以为了方便实验我们重新创建一个server1的快照,覆盖之前的server1
[root@foundation19 ~]# cd /var/lib/libvirt/images/
[root@foundation19 images]# ls
[root@foundation19 images]# qemu-img create -f qcow2 -b base7.3.qcow2 server1
创建好快照之后直接打开就可以使用
2.server1安装nginx
(1)解压安装包
[root@server1 ~]# ls
nginx-1.16.0.tar.gz
[root@server1 ~]# tar zxf nginx-1.16.0.tar.gz
[root@server1 ~]# ls
nginx-1.16.0 nginx-1.16.0.tar.gz
[root@server1 ~]# cd nginx-1.16.0
[root@server1 nginx-1.16.0]#
(2)安装依赖性
[root@server1 nginx-1.16.0]# yum install -y gcc zlib-devel pcre-devel
(3)关闭debug日志
[root@server1 nginx-1.16.0]# vim auto/cc/gcc
(4)编译安装
[root@server1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx
[root@server1 nginx-1.16.0]# make && make install
(5)编辑配置文件,打开php,添加默认测试页index.php
[root@server1 ~]# cd /usr/local/nginx
[root@server1 nginx]# ls
conf html logs sbin
[root@server1 nginx]# vim conf/nginx.conf
[root@server1 nginx]#
[root@server1 nginx]# sbin/nginx -t
(6)打开服务,可以看到80端口打开
[root@server1 nginx]# sbin/nginx
[root@server1 nginx]# netstat -tnlp
3.安装php
(1)下载php以及需要的依赖性
[root@server1 ~]# ls
nginx-1.16.0 nginx-1.16.0.tar.gz rhel7
[root@server1 ~]#
(2)安装所有的包
[root@server1 ~]# cd rhel7/
[root@server1 rhel7]# ls
[root@server1 rhel7]# yum install -y *
(3)开启php服务,查看端口号9000已经打开
[root@server1 rhel7]# systemctl start php-fpm
[root@server1 rhel7]#
[root@server1 rhel7]# netstat -tnlp
4.在/usr/local/nginx/html目录下编写一个测试页index.php
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# ls
50x.html index.html
[root@server1 html]# vim test.php
[root@server1 html]#
[root@server1 html]# ls
50x.html index.html test.php
[root@server1 html]#
[root@server1 html]# mv test.php index.php
[root@server1 html]# ls
50x.html index.html index.php
<?php
$redis = new Redis();
$redis->connect('172.25.19.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.19.3','redis','redhat');
mysql_select_db(test);
$result = mysql_query($query);
//如果没有找到$key,就将该查询sql的结果缓存到redis
while ($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>";
}
?>
重新加载nginx服务
[root@server1 html]# ../sbin/nginx -s reload
- 配置server2
因为之前安装配置过redis,server2的redis是一个slave,所以编辑配置文件,删除slave的配置即可
1.编辑配置文件,删除最后一行
[root@server2 ~]# cd /etc/redis/
[root@server2 redis]# ls
6379.conf sentinel.conf
[root@server2 redis]# vim 6379.conf
2.开启redis服务
[root@server2 redis]# /etc/init.d/redis_6379 start
Starting Redis server...
3.删除之前的数据,查看当前状态
[root@server2 redis]# redis-cli
127.0.0.1:6379> get name
"yan"
127.0.0.1:6379> DEL name
(integer) 0
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> info
- 配置server3
1.关闭mysqld服务,卸载mysql
[root@server3 ~]# systemctl stop mysqld
[root@server3 ~]#
[root@server3 ~]# rpm -e `rpm -qa | grep mysql` --nodeps
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
2.安装mariadb
[root@server3 ~]# yum install -y mariadb-server
3.删除数据目录下的数据,开启mariadb
[root@server3 ~]# cd /var/lib/mysql/
[root@server3 mysql]# ls
[root@server3 mysql]# rm -fr *
[root@server3 mysql]# ls
[root@server3 mysql]# systemctl start mariadb
4.安全初始化
[root@server3 mysql]# mysql_secure_installation
5.登陆数据库,创建test库,创建redis用户并授权
[root@server3 mysql]# mysql -p
Enter password:
MariaDB [(none)]> show databases;
MariaDB [(none)]> create database test;
MariaDB [(none)]> grant all on test.* to redis@'%' identified by 'redhat';
MariaDB [(none)]> flush privileges;
6.将test.sql倒入数据库
[root@server3 ~]# ls
redis-5.0.3 test.sql
[root@server3 ~]# mysql -predhat < test.sql
7.查看test库中的数据
[root@server3 ~]# mysql -p
MariaDB [(none)]> use test;
MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
+----------------+
MariaDB [test]> select * from test
-> ;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
| 6 | test6 |
| 7 | test7 |
| 8 | test8 |
| 9 | test9 |
+----+-------+
- 访问测试:
- 打开浏览器访问server1的ip访问到的是mysql
- 刷新一下访问到的是redis,之后在刷新访问的一直是redis
命令行访问测试:
[root@server2 redis]# redis-cli
127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379> get 2
"test2"
- 补充:
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');
#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 ;
分布式的任务分发管理器
通过server1分发任务
数据库当前不支持实时更新数据加一个函数
- 修改数据后再测试:
1.server3在数据库中修改一个数据
MariaDB [test]> update test set name='westos' where id='1';
MariaDB [test]> select * from test;
+----+--------+
| id | name |
+----+--------+
| 1 | westos |
2.server2中redis查看 没有改变,浏览器查看也没有改变
[root@server2 redis]# redis-cli
127.0.0.1:6379> get 1
"test1"
3.server2再修改一个数据,浏览器查看改变了,但是数据库中没有改变
127.0.0.1:6379> set 2 westos
OK
127.0.0.1:6379> get 2
"westos"
MariaDB [test]> select * from test;
+----+--------+
| id | name |
+----+--------+
| 1 | westos |
| 2 | test2 |
总结:当前情况下,在mysql端或者redis端改变数据,在浏览器中查看不会同步改变,在没有修改的另一端查看数据也不会同步,这样在实际应用中显然是不合理的
四、配置gearman实现数据同步
同步过程:mysql -> update -> trigger -> json_map -> mysql plugin -> gearman(server) -> worker(php-gearman/php-redis) -> redis
- mysql 触发器,就相当于 Gearman 的客户端。修改表,插入表就相当于直接下发任务。然后通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,然后在通过 gearman-mysql-udf 插件将任务加入到 Gearman 的任务队列中,最后通过redis_worker.php,也就是 Gearman 的 worker 端来完成 redis 数据库的更新
1.Gearman 是一个支持分布式的任务分发框架
2.Gearman Job Server:Gearman 核心程序,需要编译安装并以守护进程形式运行在后台
3.Gearman Client:可以理解为任务的请求者
4.Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker 接收到 Gearman Client 传递的任务内容后,会按顺序处理
- server1
1.开启gearmand服务(之前在安装php的时候我们已经安装过gearman的包)
[root@server1 html]# systemctl start gearmand
[root@server1 html]# systemctl status gearmand
- (server3)mysql端:
1.下载一个lib_mysqludf_json-master的包,安装unzip命令,解压安装包
[root@server3 ~]# ls
lib_mysqludf_json-master.zip redis-5.0.3 test.sql
[root@server3 ~]# yum install -y unzip
[root@server3 ~]# ls
lib_mysqludf_json-master.zip redis-5.0.3 test.sql
[root@server3 ~]# unzip lib_mysqludf_json-master.zip
[root@server3 ~]# ls
2.安装依赖性,安装lib_mysqludf_json
(1)切换到安装目录
[root@server3 ~]# ls
lib_mysqludf_json-master lib_mysqludf_json-master.zip redis-5.0.3 test.sql
[root@server3 lib_mysqludf_json-master]# ls
(2)安装依赖性
[root@server3 lib_mysqludf_json-master]# yum install -y mariadb-devel
[root@server3 lib_mysqludf_json-master]# yum install -y gcc
(3)gcc编译
[root@server3 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared
-fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
(4)将lib_mysqludf_json.so模块复制到mysql插件库中
[root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
(5)登陆数据库可以查看到插件目录
[root@server3 lib_mysqludf_json-master]# mysql -p
Enter password:
MariaDB [(none)]> show global variables like 'plugin_dir';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
3.安装gearman软件包,安装php的gearman扩展程序
(1)解压gearman-mysql-udf安装包
[root@server3 ~]# ls
gearman-mysql-udf-0.6.tar.gz lib_mysqludf_json-master.zip test.sql
lib_mysqludf_json-master redis-5.0.3
[root@server3 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz
(2)server1将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 三个包传给server3
[root@server1 rhel7]# scp libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-* server3:
(3)server3安装这三个包
[root@server3 ~]# yum install -y libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-*
(4)编译安装
[root@server3 ~]# cd gearman-mysql-udf-0.6
[root@server3 gearman-mysql-udf-0.6]# ls
[root@server3 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql
[root@server3 gearman-mysql-udf-0.6]# make && make install
4.注册udf函数,查看函数
MariaDB [(none)]> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> select * from mysql.func;
+--------------------+-----+-------------------------+----------+
| name | ret | dl | type |
+--------------------+-----+-------------------------+----------+
| json_object | 0 | lib_mysqludf_json.so | function |
| gman_do_background | 0 | libgearman_mysql_udf.so | function |
| gman_servers_set | 0 | libgearman_mysql_udf.so | function |
+--------------------+-----+-------------------------+----------+
3 rows in set (0.00 sec)
5.指定gearman服务信息
MariaDB [(none)]> select gman_servers_set('172.25.19.1:4730');
+--------------------------------------+
| gman_servers_set('172.25.19.1:4730') |
+--------------------------------------+
| 172.25.19.1:4730 |
+--------------------------------------+
6.编写触发器,导入数据库
[root@server3 ~]# 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');
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 ;
[root@server3 ~]# mysql -predhat < test.sql
7.查看触发器
[root@server3 ~]# mysql -p
MariaDB [(none)]> show triggers from test;
+-------------+--------+-------+----------------------------------------------------------------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| Trigger | Event | Table | Statement | Timing | Created | sql_mode | Definer | character_set_client | collation_connection | Database Collation |
+-------------+--------+-------+----------------------------------------------------------------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| datatoredis | UPDATE | test | BEGIN
SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
END | AFTER | NULL | | root@localhost | utf8 | utf8_general_ci | latin1_swedish_ci |
+-------------+--------+-------+----------------------------------------------------------------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
- 配置worker
1.编写gearman的worker端
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');
$redis = new Redis();
$redis->connect('172.25.19.2', 6379);
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);
}
?>
[root@server1 ~]# vim worker.php
[root@server1 ~]#
[root@server1 ~]# cp worker.php /usr/local
[root@server1 ~]#
2.后台运行worker
[root@server1 ~]# nohup php /usr/local/worker.php &>/dev/null &
[1] 15278
[root@server1 ~]#
[root@server1 ~]# ps ax
- 测试:
mysql修改数据
MariaDB [(none)]> use test;
MariaDB [test]> update test set name='redhat' where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [test]> select * from test;
+----+--------+
| id | name |
+----+--------+
| 1 | westos |
| 2 | redhat |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
| 6 | test6 |
| 7 | test7 |
| 8 | test8 |
| 9 | test9 |
+----+--------+
9 rows in set (0.00 sec)
-
浏览器中刷新以下就可以看到数据更新
redis查看也可以看到127.0.0.1:6379> get 2 "redhat"