溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

搭建redis+mysql架構(gòu)的詳細(xì)步驟

發(fā)布時間:2020-05-26 16:36:55 來源:網(wǎng)絡(luò) 閱讀:378 作者:三月 欄目:數(shù)據(jù)庫

下面一起來了解下搭建redis+mysql架構(gòu)的詳細(xì)步驟,相信大家看完肯定會受益匪淺,文字在精不在多,希望搭建redis+mysql架構(gòu)的詳細(xì)步驟這篇短內(nèi)容是你想要的。

redis+mysql框架搭建

   redis是一個key-value存儲系統(tǒng)。和memcached類似,不過redis支持的value類型更多,主要有:string(字符串)、list(鏈表)、set(集合)、zset(有序集合)和hash(哈希類型)。redis和memcached一樣,為了保證效率,都是把數(shù)據(jù)緩存在內(nèi)存中。區(qū)別是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改的操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)master-slave主從同步。

簡單的比較redis和memcached的區(qū)別,主要就是以下幾點(diǎn): 1、redis不僅支持簡單的鍵值類型的數(shù)據(jù),同時提供string、set、zset、hash等數(shù)據(jù)結(jié)構(gòu)的存儲。 2、redis支持?jǐn)?shù)據(jù)的備份,即 master-slave模式的數(shù)據(jù)備份。 3、redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進(jìn)行使用。

接下來介紹redis+mysql架構(gòu)的搭建: 環(huán)境:紅帽6.5、虛擬主機(jī)VM1 ip=172.25.10.8

一:在虛擬主機(jī)上的安裝redis:

yum install -y gcc gcc-c++ ;安裝編譯軟件

cd redis/

tar -zxf redis-3.0.2.tar.gz ;解壓軟件包

cd redis-3.0.2 ;進(jìn)入解壓的目錄

make ---> #make install ;直接編譯并且安裝

cd utils/ ;進(jìn)入此util目錄,執(zhí)行下面的腳本。配置并啟動程序

./install_server.sh

搭建redis+mysql架構(gòu)的詳細(xì)步驟

netstat -antlpe | grep redis ;可以查看redis使用的端口號為6379

redis-cli ;redis客戶端的使用命令

ste no1 1234 ;將鍵no1添加鍵值1234; get no1 ;獲得no1的鍵值;

二、介紹redis作mysql的緩存云服務(wù)器。 1、安裝lnmp環(huán)境,安裝以下軟件包:

yum install -y mysql-server ;安裝mysql數(shù)據(jù)庫

yum install -y nginx-1.8.0-1.el6.ngx.x86_64.rpm php-* ;安裝nginx和php

vim /etc/php.ini ;編輯php的配置文件,修改時區(qū)

搭建redis+mysql架構(gòu)的詳細(xì)步驟

vim /etc/php-fpm.d/www.conf ;修改php-fpm 用戶和組為nginx,默認(rèn)為apache

搭建redis+mysql架構(gòu)的詳細(xì)步驟

/etc/init.d/php-fpm start ;啟動php-fpm服務(wù)

netstat -antlpe ;查看php-fpm端口號9000;

/etc/init.d/nginx start ;啟動nginx服務(wù);

cd /usr/share/nginx/html/ ;進(jìn)入默認(rèn)發(fā)布目錄,編寫php 測試頁面

vim index.php

<?php 

Phpinfo()

?>

vim /etc/nginx/conf.d/default.conf ;編寫nginx的默認(rèn)配置文件;打開php模塊,

搭建redis+mysql架構(gòu)的詳細(xì)步驟


搭建redis+mysql架構(gòu)的詳細(xì)步驟

/etc/init.d/nginx restart ;重新啟動nginx服務(wù);

創(chuàng)建php 測試頁面;

搭建redis+mysql架構(gòu)的詳細(xì)步驟

vim index.php

<?php $redis = new Redis(); $redis->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 的結(jié)果緩存到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 ;啟動數(shù)據(jù)庫,

安裝php的redis擴(kuò)展; 材料:phpredis-master.zip

unzip phpredis-master.zip ;解壓軟件包

cd phpredis-master

phpize ;進(jìn)行配置編譯安裝

./configure

make ----># make install

cd /usr/lib64/php/modules/ ;進(jìn)入php的模塊目錄;

cp /etc/php.d/mysql.ini /etc/php.d/redis.ini ;拷貝mysql.ini為redis.ini;

vim /etc/php.d/redis.in ;修改模塊內(nèi)容,其實(shí)就是添加redis.so 模塊;

extension=redis.so

/etc/init.d/php-fpm reload ;php-fpm從新導(dǎo)入功能模塊;

在數(shù)據(jù)庫中添加測試用test.sql.

mysql < test.sql

mysql

select * from test; update test set name="westos" where id=1;


   在FIREFOX中輸入master的ip進(jìn)入頁面,查看測試結(jié)果變化;進(jìn)行驗(yàn)證數(shù)據(jù)從哪里讀到,第一應(yīng)該是從數(shù)據(jù)庫中讀到,刷新一次數(shù)據(jù)緩存在redis中,所以數(shù)據(jù)應(yīng)該是從redis中讀到;但是如果在數(shù)據(jù)庫中更新了相關(guān)的數(shù)據(jù),而redis中緩存的數(shù)據(jù)卻無法及時更新,因?yàn)閞edis中任然有對應(yīng)的KEY,數(shù)據(jù)就不會更新,這是一個缺陷,接下來就要通過mysql觸發(fā)器將改變的數(shù)據(jù)同步到redis中。

搭建redis+mysql架構(gòu)的詳細(xì)步驟           搭建redis+mysql架構(gòu)的詳細(xì)步驟

三、數(shù)據(jù)庫與redis數(shù)據(jù)同步: 配置gearman實(shí)現(xiàn)數(shù)據(jù)同步:Gearman 是一個支持分布式的任務(wù)分發(fā)框架, Gearman Job Server:Gearman 核心程序,需要編譯安裝并以守護(hù)進(jìn)程形式運(yùn)行在后臺。 Gearman Client:可以理解為任務(wù)的請求者。 Gearman Worker:任務(wù)的真正執(zhí)行者,一般需要自己編寫具體邏輯并通過守護(hù)進(jìn)程方式 運(yùn)行,Gearman Worker 接收到Gearman Client 傳遞的任務(wù)內(nèi)容后,會按順序處理。 大致流程:下面要編寫的mysql 觸發(fā)器,就相當(dāng)于Gearman 的客戶端。修改表,插入表就相當(dāng)于直接 下發(fā)任務(wù)。然后通過libmysqludfjson UDF庫函數(shù)將關(guān)系數(shù)據(jù)映射為JSON 格式,然后 在通過gearman-mysql-udf插件將任務(wù)加入到Gearman的任務(wù)隊(duì)列中,最后通過 redis_worker.php,也就是Gearman 的worker 端來完成redis 數(shù)據(jù)庫的更新。

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服務(wù);

tar -zxf gearman-1.1.2.tgz ;安裝php的gearman擴(kuò)展

cd gearman-1.1.2

phpize

./configure

make -----> # make install ;源碼編譯安裝三部曲;

cd /usr/lib64/php/modules/ --> gearman.so ;在此進(jìn)入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庫函數(shù)將關(guān)系數(shù)據(jù)映射為JSON格式。而通常將數(shù)據(jù)映射為JSON格式是通過程序來轉(zhuǎn)換的。

yum install -y mysql-devel ;安裝mysql-devle軟件依賴項(xiàng)

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 函數(shù)

>CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';

>select * from mysql.func;             ;查看注冊的函數(shù);

搭建redis+mysql架構(gòu)的詳細(xì)步驟


安裝gearman-mysql-udf,這個插件是用來管理調(diào)用Gearman 的分布式的隊(duì)列。

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函數(shù);


> create function gman_servers_set returns string soname 'libgearman_mysql_udf.so';


> select * from mysql.func;           ;查看函數(shù)

搭建redis+mysql架構(gòu)的詳細(xì)步驟

cd  ~/redis/

vim test.sql

mysql

> show triggers from test;

>select gman_servers_set('127.0.0.1:4730');        ;指定gearman的服務(wù)信息,

編寫mysql 觸發(fā)器(根據(jù)實(shí)際情況編寫)

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; ;查看觸發(fā)器;

搭建redis+mysql架構(gòu)的詳細(xì)步驟

編寫gearman的worker端:

vim 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); #這條語句就是將id 作KEY 和 name 作VALUE 分開存儲,需要和前面寫的php 測試代碼的存取一致。 } ?>

nohup php worker.php & ;后臺運(yùn)行worker

更新mysql中的數(shù)據(jù),mysql 更新數(shù)據(jù)庫內(nèi)容,redis就會立即更新緩存的數(shù)據(jù)??梢灾苯域?yàn)證。


搭建redis+mysql架構(gòu)的詳細(xì)步驟       搭建redis+mysql架構(gòu)的詳細(xì)步驟

看完搭建redis+mysql架構(gòu)的詳細(xì)步驟這篇文章后,很多讀者朋友肯定會想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI