🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### Redis作为mysql的缓存服务器(读写分离) * * * * * 一、redis简介 Redis是一个key-value存储系统。和Memcached类似,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++(hiredis),C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便。 二、架构图 ![](https://box.kancloud.cn/6b5d04614aff422e8e2fbbbb06b080df_921x190.png) 大致结构就是读写分离,将mysql中的数据通过触发器同步到redis中。 三、安装LNMP环境 四、安装redis 1、安装redis 2、安装php的redis扩展 3、测试是否安装成功 五、读写分离 这里只是简单的做了一下读,没有写操作的相关代码,过一会测试,直接到数据库里执行update来模拟写操作。 1、在mysql中插入一些测试数据 ~~~ [iyunv@redis ~]# mysql -u root -p123456 mysql> create database mytest; mysql> 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; mysql> INSERT INTO `test` VALUES (1,'sven'),(2,'jim'),(3,'zhu'),(4,'wang'),(5,'ftd'),(6,'test'),(7,'test01'),(8,'test02'),(9,'test03'); mysql> select * from mytest.test; +----+--------+ | id | name | +----+--------+ | 1 | sven | | 2 | jim | | 3 | zhu | | 4 | wang | | 5 | ftd | | 6 | test | | 7 | test01 | | 8 | test02 | | 9 | test03 | +----+--------+ ~~~ ~~~ <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379) or die ("could net connect redis server"); $query = "select * from test limit 8"; //这里读取了8条数据 for ($key = 1; $key < 9; $key++) { if (!$redis->get($key)) { $connect = mysql_connect('127.0.0.1','root','123456'); mysql_select_db(mytest); $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 < 9; $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>"; } ?> ~~~ 第一次访问,redis中没有对应的KEY ![](https://box.kancloud.cn/8b56ca16383d2521defe013f5c64151b_612x415.png) 再次访问,此时redis中已有相关数据 ![](https://box.kancloud.cn/3e7801cbedb5d593a24442cd7bee2c2c_617x423.png) 到这里,我们已经实现了redis作为mysql的缓存服务器,但是如果更新了mysql,redis中仍然会有对应的KEY,数据就不会更新,此时就会出现mysql和redis数据不一致的情况。所以接下来就要通过mysql触发器将改变的数据同步到redis中。 六、通过gearman实现同步 * * * * * https://www.iyunv.com/thread-52670-1-1.html