redis配置mysql缓存_Redis做mysql的缓存服务器

一redis简介:redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个appendonly file(aof)里面(这称为“全持久化模式”)。

二主机环境 rhel6.5 selinx and iptales disabled

1. Redis 安装

实验环境   172.25.254.2    vm2.example.com   上

首先得到    zxf redis-3.0.2.tar.gz

tar zxf redis-3.0.2.tar.gz

cd redis-3.0.2

make && make install

1.1. 配置并启动服务

cd utils/

./install_server.sh              这里一路回车都使用的默认

点击(此处)折叠或打开

[root@vm2 utils]# ./install_server.sh

Welcome to the redis service installer

This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]

Selecting default: 6379

Please select the redis config file name [/etc/redis/6379.conf]

Selected default - /etc/redis/6379.conf

Please select the redis log file name [/var/log/redis_6379.log]

Selected default - /var/log/redis_6379.log

Please select the data directory for this instance [/var/lib/redis/6379]

Selected default - /var/lib/redis/6379

Please select the redis executable path [/usr/local/bin/redis-server]

Selected config:

Port : 6379

Config file : /etc/redis/6379.conf

Log file : /var/log/redis_6379.log

Data dir : /var/lib/redis/6379

Executable : /usr/local/bin/redis-server

Cli Executable : /usr/local/bin/redis-cli

Is this ok? Then press ENTER to go on or Ctrl-C to abort.

Copied /tmp/6379.conf => /etc/init.d/redis_6379

Installing service...

Successfully added to chkconfig!

Successfully added to runlevels 345!

Starting Redis server...

Installation successful!

1.2简单测试,如下就证明成功

点击(此处)折叠或打开

[root@vm2 utils]# redis-cli

127.0.0.1:6379> ping

PONG

2 安装lnmp架构2.1 安装以下软件包

点击(此处)折叠或打开

[root@vm2 lnmp]# ls

nginx-1.8.0-1.el6.ngx.x86_64.rpm php-fpm-5.3.3-38.el6.x86_64.rpm

php-5.3.3-38.el6.x86_64.rpm php-gd-5.3.3-38.el6.x86_64.rpm

php-cli-5.3.3-38.el6.x86_64.rpm php-mbstring-5.3.3-38.el6.x86_64.rpm

php-common-5.3.3-38.el6.x86_64.rpm php-mysql-5.3.3-38.el6.x86_64.rpm

php-devel-5.3.3-38.el6.x86_64.rpm php-pdo-5.3.3-38.el6.x86_64.rpm

[root@vm2 lnmp]# yum install -y *

2.2安装 php 的 redis 扩展

首先得到    phpredis-master.zip

unzip  phpredis-master.zip

cd  phpredis-master

phpize

./configure

make  &&  make  install

cd /etc/php.d/

cp mysql.ini  redis.ini

vim /etc/php.ini                     #添加以下行

extension=redis.so               #加载 redis 模块

点击(此处)折叠或打开

[root@vm2 php.d]# /etc/init.d/php-fpm start

Starting php-fpm: [ OK ]

2.3简单配置 nginx

vim /etc/nginx/conf.d/default.conf

location / {

root   /usr/share/nginx/html;

index   index.php  index.html index.htm;

}

location ~ \.php$ {

root           /usr/share/nginx/html;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;

include        fastcgi_params;

}

启动 nginx

点击(此处)折叠或打开

[root@vm2 php.d]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@vm2 php.d]# nginx

[root@vm2 php.d]# netstat -antlpe| grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 14520 6352/nginx

vim   /etc/php-fpm.d/www.conf     将这个配置文件中user和group改为nginx  默认是apache

user = nginx

group = nginx

/etc/init.d/php-fpm restart

点击(此处)折叠或打开

[root@vm2 php.d]# /etc/init.d/php-fpm restart

Stopping php-fpm: [ OK ]

Starting php-fpm: [ OK ]

3 在另一台虚拟机上安装mysql

实验环境   172.25.254.3    vm3.example.com   上

yum  install  -y  mysql-server

点击(此处)折叠或打开

[root@vm3 mnt]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.1.71 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all on test.* to redis@'172.25.254.2' identified by 'redhat';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

编写如下代码

点击(此处)折叠或打开

[root@vm3 mnt]# cat 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');

[root@vm3 mnt]# mysql < test.sql

4创建 php 测试页面在172.25.254.2上面进入nginx默认发布目录

cd     /usr/share/nginx/html

vim  test.php

点击(此处)折叠或打开

$redis = new Redis();

$redis->connect('127.0.0.1',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.254.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 "

";

for ($key = 1; $key < 10; $key++)

{

echo "number is $key";

echo "

";

echo "name is $data[$key]";

echo "

";

}

?>然后在浏览器进行测试,这时候我们已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis

中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情

况。所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中。

34d848b6e4ec90364b5879891f811b03.png

5,配置 gearman 实现数据同步

1. 安装 gearman 软件包:

gearmand libgearman-devel libgearman libevent libevent-devel

libevent-doc libevent-headers tokyocabinet

2,启动服务

点击(此处)折叠或打开

[root@vm2 html]# /etc/init.d/gearmand start

Starting gearmand: [ OK ]

3.安装 php 的 gearman 扩展

https://pecl.php.net

yum install -y db*-devel

tar zxf gearman-1.1.2.tgz

cd gearman-1.1.2

./configure --with-php-config=/usr/bin/php-config

make && make install

# vim /etc/php.ini

extension=gearman.so

/etc/init.d/php-fpm  restart

点击(此处)折叠或打开

[root@vm2 html]# /etc/init.d/php-fpm restart

Stopping php-fpm: [ OK ]

Starting php-fpm: [ OK ]

4. 安装 lib_mysqludf_json

lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式。通常,数据库中的数据映

射为 JSON 格式,是通过程序来转换的。

https://github.com/mysqludf/lib_mysqludf_json

yum install -y mysql-devel# unzip lib_mysqludf_json-master.zip

cd lib_mysqludf_json-master

gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so

lib_mysqludf_json.c

查看 mysql 的模块目录:

f22db43ce09e80bae89aef94f5f823c7.png

5. 安装 gearman-mysql-udf

这个插件是用来管理调用 Gearman 的分布式的队列。

https://launchpad.net/gearman-mysql-udf

tar zxf gearman-mysql-udf-0.6.tar.gz

cd gearman-mysql-udf-0.6

./configure --with-mysql=/usr/bin/mysql_config

--libdir=/usr/lib64/mysql/plugin/

make# make install

拷贝 lib_mysqludf_json.so 模块:

cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/

注册 UDF 函数

点击(此处)折叠或打开

mysql> CREATE FUNCTION json_object RETURNS STRING SONAME

'lib_mysqludf_json.so';

mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME

'libgearman_mysql_udf.so';

mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME

'libgearman_mysql_udf.so';

查看函数

fb0619d3405621d29e6cbdf501b4ffde.png

指定 gearman 的服务信息

7c3ea15b25bddd17ea564922ae19c45e.png

6. 编写 mysql 触发器(根据实际情况编写)

点击(此处)折叠或打开

vim test.sql

use test;

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 ;

查看触发器

3da791118c09313b4d873198f873e07a.png

7. 编写 gearman 的 worker 端

点击(此处)折叠或打开

vim worker.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); #这条语句就是将 id 作 KEY 和

name 作 VALUE 分开存储,需要和前面写的 php 测试代码的存取一致。

}

?>

后台运行 worker

nohup php worker.php &

47e821b7f16702e786b1924b890cc78b.png

然后在3上更新数据库

d3760f23459a804dea820366642bfde7.png

然后再浏览器中进行测试

418c5989dfa1b3bf403482d9944d3108.png

88633bbd11cb212f557e7511bf9adc33.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018 年将打响 AI 战争,7 条实战经验帮你战胜恐惧

来源&#xff1a;36氪 概要&#xff1a;不管是对科技巨头还是对创业公司&#xff0c;人工智能可以说是移动互联网时代以来最大的一个机遇。但是&#xff0c;人工智能同时也是让大多数人感到非常困惑的一项新技术&#xff0c;对它的发展现状和未来都非常迷惑。 不管是对科技巨头…

人工智能对医疗行业影响的专题研究:基本结论

来源&#xff1a;本翼资本 概要&#xff1a;从未来5-7年的中期来看&#xff0c;我们认为计算智能和部分感知智能将迎来机会&#xff0c;计算智能的基因检测和药物发现、感知智能中的医疗智能语音、医疗智能视觉、可穿戴医疗设备等将迎来爆发。 从未来5-7年的中期来看&#x…

谷歌的量子计算机如何改变世界

来源&#xff1a;网易科技 概要&#xff1a;“可正常运作的话&#xff0c;量子计算机将会改变整个世界&#xff0c;改变事物的运作方式。”硅谷知名风投Andreessen Horowitz合伙人、物理学家维贾伊潘德&#xff08;Vijay Pande&#xff09;说道。 10月17日消息&#xff0c;华尔…

layer加载的页面偶尔出现空白_Layer-Cake 模式的设计

人们通常不会阅读网页&#xff0c;应用程序甚至文章或文本段落中的每个单词。相反&#xff0c;他们经常进行浏览 -因为他们在许多网站上的经验告诉他们&#xff0c;浏览可以用更少的时间和精力来提供几乎相同的价值(即信息量)。页面的可视化布局结构方式在人们浏览内容方面起着…

未来30年的科技发展趋势

来源&#xff1a;DeepTech深科技、全球创新论坛 概要&#xff1a;20项最值得关注的科技发展趋势&#xff0c;带你通向未来。 美国公布了一份长达35页的《2016-2045年新兴科技趋势报告》。该报告是在美国过去五年内由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势相…

[机器人-3]:开源MIT Min cheetah机械狗设计(三):嵌入式硬件设计

目录 概述&#xff1a; 1、硬件组成 2、通信速率 3、通信协议 4、mbedOS 概述&#xff1a; 以1条腿进行设计&#xff0c;其它腿也一样&#xff1a; 腿部硬件组成 1、硬件组成 1&#xff09;UP board计算机板卡&#xff08;Linux OS&#xff09;&#xff1a; 腿部控制器…

AlphaGo Zero的伟大与局限——ResNet作者、旷视研究院院长孙剑深度评述

来源&#xff1a;Megvii旷视科技 概要&#xff1a;2017年10月19日&#xff0c;Deepmind 团队发布强化版的 AlphaGo Zero&#xff0c;该版本的 AlphaGo 实现了在 AI 发展中非常有意义的一步——“无师自通”&#xff0c;这也让去年败在未升级版本 AlphaGo Master 下的中国棋手柯…

《人类简史》作者:应对 AI 革命,要打造新的经济、社会和教育体系

来源&#xff1a;36氪 概要&#xff1a;正在进行的人工智能革命将改变几乎所有的工作&#xff0c;给社会和经济的发展带来机遇和挑战。一些人认为&#xff0c;人工智能将把人类赶出就业市场&#xff0c;创造一个新的“无用的阶层”&#xff1b;另一些人则认为&#xff0c;自动化…

全球厂商已向自动驾驶投入800亿美元 依然群龙无首 | 厚势

来源&#xff1a; 腾讯科技 概要&#xff1a;近日发表的一份权威研究报告指出&#xff0c;全球厂商已经在自动驾驶领域投资 800 亿美元&#xff0c;但是迄今为止&#xff0c;仍然没有一家明显处于领先优势的厂商。 自动驾驶和电动车成为当下科技行业两大热点之一&#xff0c;几…

promise的状态值_什么是Promise,Promise的三种状态

什么是Promise对象&#xff1a;Js中进行异步编程的新的解决方案&#xff0c;用于表示一个异步操作的最终完成 (或失败), 及其结果值.。语法上&#xff1a;promise是一个构造函数简单来说&#xff0c;promise对象用来封装一个异步操作并可以获取其结果语法&#xff1a;new Promi…

埃森哲报告:2017年数字化浪潮下的医疗行业五大趋势

来源&#xff1a;AI掘金志 概要&#xff1a;日前&#xff0c;埃森哲发布了《2017年数字化健康技术展望》报告&#xff0c;分析了数字化浪潮下的医疗护理行业的实际落地情况和发展前景&#xff0c;主要围绕着AI、生态系统建设、新型医疗人才挖掘、新的监督法规等五个方面进行解…

人类如何从不同角度识别物体?你需要对「小样本学习」有所了解

来源&#xff1a;转载自公众号「雷克世界」微信号&#xff1a;ROBO_AI 编译&#xff1a;嗯~阿童木呀、多啦A亮 概要&#xff1a;在视觉层次结构的较低层次&#xff0c;不变性使你可以识别矩形或线条&#xff0c;即使它是倾斜、旋转或缩放的&#xff1b;而在更高的层次上&#x…

摩尔定律已死?GPU会取代CPU的位置吗?

来源&#xff1a;全球人工智能 概要&#xff1a;CPU和GPU之所以大不相同&#xff0c;是由于其设计目标的不同&#xff0c;它们分别针对了两种不同的应用场景。 京举办的NVIDIA GTC China会议中&#xff0c;无论是AI智能运算&#xff0c;还是服务器数据中心、智能城市&#xff…

mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读

如果操作一下时报出错误&#xff1a;在数据库中执行 SET GLOBAL BINLOG_FORMAT mixed;执行后可通过SELECT * FROM information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME ‘BINLOG_FORMAT’ ;进行查看。通过客户端选择可用数据库&#xff1a;use db_test(模拟数据库)以下…

Nature Human Behavior:大脑对不公平的反应有助预测抑郁症

来源&#xff1a;生物帮、神经科技 概要&#xff1a;过去的研究已经表明&#xff0c;财富分配不均&#xff0c;即经济不平等&#xff0c;可能会促进抑郁症等精神疾病的增加。但是&#xff0c;这背后的机制却不为人知。 2017年10月2日&#xff0c;国际学术权威刊物自然出版集团旗…

这几家公司有个梦想:开发AI操作系统,让外行也成为人工智能大师

来源&#xff1a;科技行者 概要&#xff1a;未来几年人工智能会如何发展&#xff1f;除了阿尔法狗令人叹为观止的表现&#xff0c;人工智能确实也正在改变整个行业。但有一点我们是需要注意的&#xff0c;有必要让AI从总体上变得更加易于使用。 严格的说&#xff0c;Scot Barto…

mysql耦合_内聚与耦合

简单理解一下内聚和耦合。什么是模块模块就是从逻辑上将系统分解为更细微的部分&#xff0c;分而治之。复杂问题因为复杂性的问题&#xff0c;比较难解决&#xff0c;但是可以将复杂问题拆解为若干简单问题&#xff0c;逐个击破地解决这些简单问题&#xff0c;最后实现解决复杂…

Google CEO Sundar Pichai :“谷歌最大的威胁就是自身的成功”

作者&#xff1a;Dude 概要&#xff1a;10月9日&#xff0c;低调的皮柴哥接受了英国卫报的访问&#xff0c;在访谈期间&#xff0c;他分享了谷歌在人工智能上发展&#xff0c;也表达了对谷歌近年来发展的隐忧。 10月9日&#xff0c;低调的皮柴哥接受了英国卫报的访问&#xff0…

国防科技大学教授:殷建平——计算机科学理论的过去、现在与未来

来源&#xff1a;图灵人工智能殷建平 教授&#xff0c;博士生导师&#xff0c;国防科学技术大学计算机系主任。研究方向有&#xff1a;模式识别与人工智能、网络算法与信息安全。享受国务院政府特殊津贴。2015年被评为“万人计划”国家级教学名师。2009年被评为“全国优秀教师”…

《自然》杂志:关于人类未来的工作,有三个最紧迫的问题

来源&#xff1a;36氪 概要&#xff1a;机器学习会淘汰工人吗&#xff1f;零工经济&#xff08;Gig Economy&#xff09;会增加对工人的剥削吗&#xff1f;技能的差距能够弥补吗&#xff1f; 机器学习会淘汰工人吗&#xff1f;零工经济&#xff08;Gig Economy&#xff09;会增…