搭建redis+mysql架构的详细步骤
下面一起来了解下搭建redis+MySQL架构的详细步骤,相信大家看完肯定会受益匪浅,文字在精不在多,希望搭建redis+mysql架构的详细步骤这篇短内容是你想要的。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站制作、济南网络推广、小程序开发、济南网络营销、济南企业策划、济南品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供济南建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
redis+mysql框架搭建
redis是一个key-value存储系统。和memcached类似,不过redis支持的value类型更多,主要有:string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。redis和memcached一样,为了保证效率,都是把数据缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改的操作写入追加的记录文件,并且在此基础上实现master-slave主从同步。
简单的比较redis和memcached的区别,主要就是以下几点: 1、redis不仅支持简单的键值类型的数据,同时提供string、set、zset、hash等数据结构的存储。 2、redis支持数据的备份,即 master-slave模式的数据备份。 3、redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
接下来介绍redis+mysql架构的搭建: 环境:红帽6.5、虚拟主机VM1 ip=172.25.10.8
一:在虚拟主机上的安装redis:
yum install -y gcc gcc-c++ ;安装编译软件
cd redis/
tar -zxf redis-3.0.2.tar.gz ;解压软件包
cd redis-3.0.2 ;进入解压的目录
make ---> #make install ;直接编译并且安装
cd utils/ ;进入此util目录,执行下面的脚本。配置并启动程序
./install_server.sh
netstat -antlpe | grep redis ;可以查看redis使用的端口号为6379
redis-cli ;redis客户端的使用命令
ste no1 1234 ;将键no1添加键值1234; get no1 ;获得no1的键值;
二、介绍redis作mysql的缓存云服务器。 1、安装lnmp环境,安装以下软件包:
yum install -y mysql-server ;安装mysql数据库
yum install -y nginx-1.8.0-1.el6.ngx.x86_64.rpm php-* ;安装nginx和php
vim /etc/php.ini ;编辑php的配置文件,修改时区
vim /etc/php-fpm.d/www.conf ;修改php-fpm 用户和组为nginx,默认为apache
/etc/init.d/php-fpm start ;启动php-fpm服务
netstat -antlpe ;查看php-fpm端口号9000;
/etc/init.d/nginx start ;启动nginx服务;
cd /usr/share/nginx/html/ ;进入默认发布目录,编写php 测试页面
vim index.php
Phpinfo()
?>
vim /etc/nginx/conf.d/default.conf ;编写nginx的默认配置文件;打开php模块,
/etc/init.d/nginx restart ;重新启动nginx服务;
创建php 测试页面;
vim index.php
connect('127.0.0.1',6379) or die ("could net connect redis server"); $query = "select * from test limit 9"; for ($key = 1; $key < 10; $key++) { if (!$redis->get($key)) { $connect = mysqlconnect('127.0.0.1','redis','westos'); mysqlselectdb(test); $result = mysqlquery($query); //如果没有找到$key,就将该查询sql 的结果缓存到redis while ($row = mysqlfetchassoc($result)) { $redis->set($row['id'],$row['name']); } $ myserver = ' mysql'; break; } else { $myserver = "redis"; $data[$key] = $redis->get($key); } } echo $myserver; echo "
"; for ($key = 1; $key < 10; $key++) { echo "number is $key"; echo "
"; echo "name is $data[$key]"; echo "
"; } ?>
/etc/init.d/mysqld start ;启动数据库,
安装php的redis扩展; 材料:phpredis-master.zip
unzip phpredis-master.zip ;解压软件包
cd phpredis-master
phpize ;进行配置编译安装
./configure
make ----># make install
cd /usr/lib64/php/modules/ ;进入php的模块目录;
cp /etc/php.d/mysql.ini /etc/php.d/redis.ini ;拷贝mysql.ini为redis.ini;
vim /etc/php.d/redis.in ;修改模块内容,其实就是添加redis.so 模块;
extension=redis.so
/etc/init.d/php-fpm reload ;php-fpm从新导入功能模块;
在数据库中添加测试用test.sql.
mysql < test.sql
mysql
select * from test; update test set name="westos" where id=1;
在FIREFOX中输入master的ip进入页面,查看测试结果变化;进行验证数据从哪里读到,第一应该是从数据库中读到,刷新一次数据缓存在redis中,所以数据应该是从redis中读到;但是如果在数据库中更新了相关的数据,而redis中缓存的数据却无法及时更新,因为redis中任然有对应的KEY,数据就不会更新,这是一个缺陷,接下来就要通过mysql触发器将改变的数据同步到redis中。
三、数据库与redis数据同步: 配置gearman实现数据同步:Gearman 是一个支持分布式的任务分发框架, Gearman Job Server:Gearman 核心程序,需要编译安装并以守护进程形式运行在后台。 Gearman Client:可以理解为任务的请求者。 Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式 运行,Gearman Worker 接收到Gearman Client 传递的任务内容后,会按顺序处理。 大致流程:下面要编写的mysql 触发器,就相当于Gearman 的客户端。修改表,插入表就相当于直接 下发任务。然后通过libmysqludfjson UDF库函数将关系数据映射为JSON 格式,然后 在通过gearman-mysql-udf插件将任务加入到Gearman的任务队列中,最后通过 redis_worker.php,也就是Gearman 的worker 端来完成redis 数据库的更新。
yum install -y libgearman-devel-1.1.8-2.el6.x8664.rpm libgearman-1.1.8-2.el6.x8664.rpm libevent-* ;安装gearman软件包及依赖包;
yum install -y gearmand-1.1.8-2.el6.x86_64.rpm
/etc/init.d/gearmand start ;启动geaman服务;
tar -zxf gearman-1.1.2.tgz ;安装php的gearman扩展
cd gearman-1.1.2
phpize
./configure
make -----> # make install ;源码编译安装三部曲;
cd /usr/lib64/php/modules/ --> gearman.so ;在此进入php功能模块文件
cd /etc/php.d/
cp redis.ini gearman.ini ;如上添加redis功能模块一样,在这添加gearman功能模块,
vim gearman.ini
extension=gearman.so
php -m | grep gearman ;查看gearman功能模块是否添加上
安装libmysqludfjson: libmysqludfjson UDF库函数将关系数据映射为JSON格式。而通常将数据映射为JSON格式是通过程序来转换的。
yum install -y mysql-devel ;安装mysql-devle软件依赖项
cd /root/redis/
unzip libmysqludfjson-master.zip
cd libmysqludfjson-master
gcc $(mysqlconfig --cflags) -shared -fPIC -o libmysqludfjson.so libmysqludfjson.c ;将libmysqludfjson.c编译输出为libmysqludf_json.so
mysql ;查看mysql的模块目录;
show global variables like 'plugin_dir';
cp libmysqludfjson.so /usr/lib64/mysql/ ;拷贝libmysqludfjson.so 模块
mysql ;注册UDF 函数
>CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
>select * from mysql.func; ;查看注册的函数;
安装gearman-mysql-udf,这个插件是用来管理调用Gearman 的分布式的队列。
tar -zxf gearman-mysql-udf-0.6.tar.gz
cd gearman-mysql-udf-0.6
./configure --libdir=/usr/lib64/mysql/plugin ;编译安装
make -----> #make install
> create function gman_do_background returns string soname 'libgearman_mysql_udf.so'; ;注册UDF函数;
> create function gman_servers_set returns string soname 'libgearman_mysql_udf.so';
> select * from mysql.func; ;查看函数
cd ~/redis/
vim test.sql
mysql
> show triggers from test;
>select gman_servers_set('127.0.0.1:4730'); ;指定gearman的服务信息,
编写mysql 触发器(根据实际情况编写)
vim test.sql
use test; DELIMITER $$ CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN SET @RECV=gmandobackground('syncToRedis', json_object(NEW.id as id, NEW.name as name)); END$$ DELIMITER ;
mysql < test.sql
mysql > SHOW TRIGGERS FROM test; ;查看触发器;
编写gearman的worker端:
vim worker.php
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); #这条语句就是将id 作KEY 和 name 作VALUE 分开存储,需要和前面写的php 测试代码的存取一致。 } ?>
nohup php worker.php & ;后台运行worker
更新mysql中的数据,mysql 更新数据库内容,redis就会立即更新缓存的数据。可以直接验证。
看完搭建redis+mysql架构的详细步骤这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的行业资讯栏目。
网站标题:搭建redis+mysql架构的详细步骤
网站链接:http://myzitong.com/article/jipcgh.html