redis使用及配置之緩存詳解
1、Redis的介紹
Redis是一個Key-Value存儲系統。它支持存儲的value類型有:string(字符串),list(鏈表), set(無序集合),zset(sorted set有序集合)和hash,也可以把redis看成一個數據結構服務器。這些數據類型都支持pust/pop、add/remove及取交集、並集和差集運算,Redis支持各種不同方式的排序。數據都是緩存在內存中的,它也可以周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並實現了master-slave(主從)同步。
Redis提供的API語言包括C、C++、C#、Java、JavaScript、Lua、Objective-C、Perl、PHP、Python、Ruby、Go、Tcl等。
使用Redis:新浪微博,200+ Server、400 port、4G data.
使用方式:與memcache相同
1. 應用程序直接訪問Redis數據庫;
2. 應用程序直接訪問Redis,只有當訪問Redis失敗時才訪問MySQL
應用場合:
1. 取最新N個數據的操作
2. 排行榜應用
3. 需要精確設定過期時間的應用
4. 計數器應用
5. Uniq操作,獲取某段時間所有數據排重值
6. 實時系統,反垃圾系統
7. Pub/Sub構建實時消息系統
8. 構建隊列系統
9. 緩存
10. 存儲微博關注關系
Redis有庫無表無字段無行列。MongoDB有庫有集合(對應於Mysql中的表)
2、redis客戶端
可以通過百度網盤下載:
http://pan.baidu.com/s/1pLH79jX
客戶端打開圖示:
通過redisClient客戶端可以看到我們存儲到redis中的數據;
3、應用示例

<?php $master_redis_config = array('tcp://172.16.0.39:6379', array('profile' => '3.0')); $slave_redis_config = array('tcp://172.16.0.39:6379', array('profile' => '3.0')); ?>
在需要使用redis文件中加入下面代碼,自動加載redis服務:
require_once 'predis/autoload.php';
使用redis存儲服務時,代碼如下:
private function hsetRedisDatas($hash_table, $key, $value){ $redis_config = Flight::get('master_redis_config'); $redis = new Predis\Client($redis_config[0]); $redis->hset($hash_table,$key, $value); }
注意:這里使用了Flight框架加載配置文件,獲取redis訪問路徑;
獲取redis數據時,代碼如下:
private function hgetRedisDatas($hash_table, $key){ $redis_config = Flight::get('master_redis_config'); $redis = new Predis\Client($redis_config[0]); $result = $redis->hget($hash_table,$key); return $result; }
public function getShippingName($shipping_id){ $shipping_name = self::hgetRedisDatas('shipping_name', $shipping_id); if (empty($shipping_name)){ $shipping_name = "當redis沒有緩存數據時,通過讀取數據庫獲取數據"; if (!empty($shipping_name) && !isset($shipping_name['error_code'])){ self::hsetRedisDatas('shipping_name', $shipping_id, $shipping_name); } } return $shipping_name; }
更新redis緩存
create/update/delete---同時存到redis和數據庫
query--先從redis查,沒有記錄才從數據庫查,並把從數據庫查的結果也放一份到redis
private static function removeRedisDatas(){ $redis_config = Flight::get('master_redis_config'); $redis = new \Predis\Client($redis_config[0]); $redis->del($redis->keys('inventory*')); }
我們在redis中定義特殊的key,例如inventory*,這樣我們就可以將inventory開頭的緩存清空,而不至於影響其他redis緩存數據;