redis作为mysql的缓存服务器(读写分离)
2016-08-04 17:24
423 查看
一、redis简介
Redis是一个key-value存储系统。和Memcached类似,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++( hiredis ),C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便。
二、架构图
大致结构就是读写分离,将mysql中的数据通过触发器同步到redis中
三、安装LNMP环境(这里为了省事,就是用yum来安装)
1、修改yum源
6、测试
"$redis->set($work->id, $work->name)]
8、更新mysql中的数据
从返回值可以看到,触发器是触发成功的(这里的@RECV是上面mysql TIGGER的返回值)。我们在redis中查看数据:
这里的数据居然没有变化,这是我们就要排错了。
Redis是一个key-value存储系统。和Memcached类似,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++( hiredis ),C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便。
二、架构图
大致结构就是读写分离,将mysql中的数据通过触发器同步到redis中
三、安装LNMP环境(这里为了省事,就是用yum来安装)
1、修改yum源
[root@redis ~]# vim /etc/yum.repos.d/epel.repo #添加这个文件 [epel] name=Extra Packages for Enterprise Linux 6 - $basearch baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch failovermethod=priority enabled=1 gpgcheck=0 [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=1
[root@redis ~]# vim /etc/nginx/nginx.conf server { listen 80; #定义使用www.xx.com访问 server_name www.xx.com; #设定本虚拟主机的访问日志 access_log /logs/www.xx.com.access.log main; #默认请求 location / { root /www/; #定义服务器的默认网站根目录位置 index index.php index.html index.htm; #定义首页索引文件的名称 } location ~ \.php$ { root /www/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name; include fastcgi_params; } }
[root@redis ~]# mysql mysql> grant all privileges on *.* to root@localhost identified by '123456'; mysql> flush privileges;
6、测试
[root@redis ~]# vim /www/index.php <?php phpinfo(); ?>
[root@redis ~]# wget -c -t 0 https://github.com/owlient/phpredis/archive/master.zip [root@redis ~]# unzip master.zip [root@redis ~]# cd phpredis-master/ [root@redis phpredis-master]# phpize [root@redis phpredis-master]# ./configure --with-php-config=/usr/bin/php-config [root@redis phpredis-master]# make && make install #修改php的配置文件,如果没有“extension=redis.so”,就加上这一行 [root@redis ~]# vim /etc/php.ini extension=redis.so [root@redis ~]# /etc/init.d/php-fpm restart 停止 php-fpm: [确定] 正在启动 php-fpm: [确定]
[root@redis ~]# vim /www/redis_worker.php <?php $worker = new GearmanWorker(); $worker->addServer(); $worker->addFunction('syncToRedis', 'syncToRedis'); $redis = new Redis(); $redis->connect('127.0.0.1', 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@redis www]# nohup php redis_worker.php &
"$redis->set($work->id, $work->name)]
8、更新mysql中的数据
mysql> set @RECV = 1; mysql> select @RECV; +------+ | @RECV| +------+ | 1 | +------+ mysql> update test set name = 'ssss' where id = 1; mysql> select @RECV; +------+ | @RECV| +------+ | NULL | +------+
从返回值可以看到,触发器是触发成功的(这里的@RECV是上面mysql TIGGER的返回值)。我们在redis中查看数据:
1 2 3 | [root@redis redis]# ./redis-cli 127.0.0.1:6379> get 1 "sven" |
[root@redis ~]# vim /var/log/audit/audit.log type=AVC msg=audit(1427807674.425:107): avc: denied { name_connect } for pid=12453 comm="mysqld" dest=4730 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:o bject_r:port_t:s0 tclass=tcp_socket #看到这样一条日志,就知道是selinux阻止了同步 #现在将selinux的模式调成Permissive [root@redis ~]# getenforce Enforcing [root@redis ~]# setenforce 0 [root@redis ~]# getenforce Permissive
设置完成以后,再次执行update,进入redis进行查看127.0.0.1:6379> get 1 "ssss"
刷新一下刚刚的php界面
到这里就基本算是大功告成了, 只要application将数据写到mysql中,mysql触发器检测到更新,就会通过Gearman将数据同步到redis中。然后读取的话,就直接从redis中进行读取。当然这只是个实验环境,实际上还有很多细节要调整。
相关文章推荐
- redis作为mysql的缓存服务器(读写分离)
- redis作为mysql的缓存服务器(读写分离)
- redis作为mysql的缓存服务器(读写分离)
- redis作为mysql的缓存服务器(读写分离) (转)
- redis作为mysql的缓存服务器(读写分离) (转)
- redis作为mysql的缓存服务器(读写分离) 推荐
- redis作为mysql的缓存服务器(读写分离)
- redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)
- Windows下Redis作为Mysql的缓存服务器-读写分离
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- 采用redis作为独立缓存服务器(一)
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- ubuntu16.04下搭建ngnix+php+mysql+Redis,实现数据库的读写分离
- Redis 集群及将 Redis 作为 mysql 的缓存服务器实战
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- redis作为缓存服务器
- 通过Gearman实现MySQL到Redis的数据同步,继而实现读写分离
- 001-Springboot从数据库读取配置文件并启动Redis作为缓存服务器