Redis 最簡單的用法就是直接存儲字符串,Redis 寫入和讀取性能遠高于 MySQL。所以我們經常使用 Redis 作為緩存層為 MySQL 數據庫保駕護航。

> Cache 方法默認使用的是文件緩存,需要自行去 config.php 配置文件中修改緩存存儲方式
## 修改配置文件
默認配置\[文件緩存\]
~~~
'cache' => [
// 驅動方式
'type' => 'File',
// 緩存保存目錄
'path' => CACHE_PATH,
// 緩存前綴
'prefix' => '',
// 緩存有效期 0表示永久緩存
'expire' => 0,
],
~~~
Redis 緩存配置
~~~
'cache' => [
// 驅動方式
'type' => 'Redis',
// 緩存前綴
'prefix' => '',
// 緩存有效期 0表示永久緩存
'expire' => 0,
// redis 主機
'host' => '127.0.0.1',
// redis 端口
'port' => 6379,
// redis 密碼
'password' => '',
],
~~~
建議不使用緩存前綴,避免浪費內存空間。如果同一臺服務器上的 Redis 實例同時存儲多個項目的緩存,建議啟動多個 Redis 實例,每個實例使用不同端口,存儲不同項目的數據,避免操作阻塞影響其他項目的讀取時間。
## 使用 ThinkPHP5 Cache類控制緩存代碼
~~~
public function getUserData($user_id)
{
if (!$data = Cache::get("user:{$user_id}")) {
$data = Db::name('user')->where('id', $user_id)->find();
Cache::set('user:{$user_id}', $data);
}
return $data;
}
~~~
## 使用 PHP Redis 控制緩存代碼
~~~
public function getUserData($user_id)
{
$redis = $this->redis;
if (!$data = $redis->get("user:{$user_id}")) {
$data = Db::name('user')->where('id', $user_id)->find();
$redis->set('user:{$user_id}', $data);
}
return $data;
}
~~~
首先查詢緩存是否存在,如果存在直接返回緩存內容。不存在的話,取數據庫讀取內容后存入緩存中,下次就會直接從緩存中讀取內容。
如果項目只是存儲在 Redis 中,減輕 MySQL 壓力。建議不要設置緩存時間,由手動控制更新緩存。
示例為查詢時建立緩存,應該同時在創建數據和修改數據時也建立緩存。避免高并發下緩存沒命中,導致流量瞬間進入 MySQL 查詢。建議使用 ThinkPHP5 的模型事件`after_write`控制緩存的創建和更新。
本文示例直接使用字符串來存儲緩存,實際項目中更多的是使用哈希或者列表來實現。