您好,登錄后才能下訂單哦!
下面一起來了解下搭建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:
ste no1 1234 ;將鍵no1添加鍵值1234; get no1 ;獲得no1的鍵值;
二、介紹redis作mysql的緩存云服務(wù)器。 1、安裝lnmp環(huán)境,安裝以下軟件包:
<?php
Phpinfo()
?>
創(chuàng)建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 "
"; } ?>
安裝php的redis擴(kuò)展; 材料:phpredis-master.zip
extension=redis.so
在數(shù)據(jù)庫中添加測試用test.sql.
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中。
三、數(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ù)庫的更新。
extension=gearman.so
安裝libmysqludfjson: libmysqludfjson UDF庫函數(shù)將關(guān)系數(shù)據(jù)映射為JSON格式。而通常將數(shù)據(jù)映射為JSON格式是通過程序來轉(zhuǎn)換的。
show global variables like 'plugin_dir';
>CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
>select * from mysql.func; ;查看注冊的函數(shù);
安裝gearman-mysql-udf,這個插件是用來管理調(diào)用Gearman 的分布式的隊(duì)列。
> 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ù)
> show triggers from test;
>select gman_servers_set('127.0.0.1:4730'); ;指定gearman的服務(wù)信息,
編寫mysql 觸發(fā)器(根據(jù)實(shí)際情況編寫)
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 > SHOW TRIGGERS FROM test; ;查看觸發(fā)器;
編寫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 測試代碼的存取一致。 } ?>
更新mysql中的數(shù)據(jù),mysql 更新數(shù)據(jù)庫內(nèi)容,redis就會立即更新緩存的數(shù)據(jù)??梢灾苯域?yàn)證。
看完搭建redis+mysql架構(gòu)的詳細(xì)步驟這篇文章后,很多讀者朋友肯定會想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。
免責(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)容。