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;对它的发展现状和未来都非常迷惑。 不管是对科技巨头…

debconf-set-selections mysql_docker 静默安装mysql

1.功能作用在debconf database中插入默认值2.位置/usr/bin/debconf-set-selections3.格式用法debconf-set-selections [-vcu] [file]4.主要参数123-v,--verbose显示运行过程信息-c,--checkonly只检查输入文件的格式-u,--unseen在预置参数时&#xff0c;不设置‘seen‘标识5.应用…

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

来源&#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份科技趋势相…

mysql dns反向解析_Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)

Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)时间&#xff1a;2019-01-19 11:28作者&#xff1a;网友投稿MySQL数据库收到一个网络连接后&#xff0c;首先拿到对方的IP地址&#xff0c;然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应的主机名。用主机名…

[机器人-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 下的中国棋手柯…

mysql 窗口函数最新一条_MySQL 8.0 窗口函数(window functions)

窗口函数(window functions)是数据库的标准功能之一&#xff0c;主流的数据库比如Oracle&#xff0c;PostgreSQL都支持窗口函数功能&#xff0c;MySQL 直到 8.0 版本才开始支持窗口函数。窗口函数&#xff0c;简单来说就是对于一个查询SQL&#xff0c;将其结果集按指定的规则进…

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

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

php mysql 胚子_php mysql数据库连接浅识

1、连接数据库连接函数&#xff1a;a、mysql_connect() &#xff1a;函数打开非持久的 MySQL 连接b、mysql_pconnect() &#xff1a;函数打开持久的MySQL 连接mysql_connect()格式&#xff1a;mysql_connect(server,user,pwd,newlink,clientflag)注&#xff1a;脚本一结束&…

全球厂商已向自动驾驶投入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、生态系统建设、新型医疗人才挖掘、新的监督法规等五个方面进行解…

python修改xpath节点_Xpath python在特定文本后查找节点

这里是HTML代码&#xff1a;Specific text 1link1 inside specific text 1link2 inside specific text 1link3 inside specific text 1Specific text 2link1 inside specific text 2link2 inside specific text 2link3 inside specific text 2link4 inside specific text 2Spec…

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

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

python链表和树实验报告_关于Python实现树结构和链表结构的一点想法

关于Python实现树结构和链表结构的一点想法Python由于内置的数据结构具有很高的灵活性&#xff0c;所以可以用很多种方式来构建树、图、链表等结构1. 树的Python实现python自然可以使用class来创建Node结点类和Trie类&#xff0c;然后通过left和right属性保存Node结点来实现树P…

摩尔定律已死?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(模拟数据库)以下…