您好,登錄后才能下訂單哦!
下面一起來了解下搭建redis+mysql架構的詳細步驟,相信大家看完肯定會受益匪淺,文字在精不在多,希望搭建redis+mysql架構的詳細步驟這篇短內容是你想要的。
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:
ste no1 1234 ;將鍵no1添加鍵值1234; get no1 ;獲得no1的鍵值;
二、介紹redis作mysql的緩存云服務器。 1、安裝lnmp環境,安裝以下軟件包:
<?php
Phpinfo()
?>
創建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 的結果緩存到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擴展; 材料:phpredis-master.zip
extension=redis.so
在數據庫中添加測試用test.sql.
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 數據庫的更新。
extension=gearman.so
安裝libmysqludfjson: libmysqludfjson UDF庫函數將關系數據映射為JSON格式。而通常將數據映射為JSON格式是通過程序來轉換的。
show global variables like 'plugin_dir';
>CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
>select * from mysql.func; ;查看注冊的函數;
安裝gearman-mysql-udf,這個插件是用來管理調用Gearman 的分布式的隊列。
> 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; ;查看函數
> show triggers from test;
>select gman_servers_set('127.0.0.1:4730'); ;指定gearman的服務信息,
編寫mysql 觸發器(根據實際情況編寫)
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; ;查看觸發器;
編寫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中的數據,mysql 更新數據庫內容,redis就會立即更新緩存的數據。可以直接驗證。
看完搭建redis+mysql架構的詳細步驟這篇文章后,很多讀者朋友肯定會想要了解更多的相關內容,如需獲取更多的行業信息,可以關注我們的行業資訊欄目。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。