php laravel5.1配置redis
正文來源:https://lvwenhan.com/php/413.html
正文
Redis 簡介
'Redis' 是一個高效能的 'key-value' 資料庫,其 'value' 支援 'String'、'Map(Hash)'、'list'、'set' 和 'sorted sets',中文翻譯為 字串、字典(雜湊,在'世界上最好的語言PHP' 中屬於 '陣列' 的一部分)、列表、集合和有序集合。
我們可以用 Redis 作為快取記憶體,存放系統經常需要訪問的資料。相比使用檔案作為快取,Redis 擁有更高的效能、更好地可維護性和更強大的操作 API。
Redis 安裝
Redis 官網為
Redis 服務端裝好並啟動之後,並不能寫一行程式碼直接開始使用了,我們還需要安裝 '客戶端'。目前有兩種方式比較推薦:
注意:作為 PHP 擴充套件安裝時,請先打印出 'phpinfo()',找到 'Loaded Configuration File' 這一項,編輯這個 'php.ini' 才有效。別忘了 '重啟' Apache 或者 php-fpm。
Redis 使用
我們在此選擇 'nrk/predis' 包作為 Redis 驅動。編輯 'composer.json':
"require": { "codingbean/macaw": "dev-master", "illuminate/database": "*", "filp/whoops": "*", "nette/mail": "*", "predis/predis": "*" },
執行 'composer update',等待安裝完成。
然後我們就要開始構建 Redis 類了,新建 'services/Redis.php':
<?php use Predis\Client; /** * \Redis */ class Redis { const CONFIG_FILE = '/config/redis.php'; protected static $redis; public static function init() { self::$redis = new Client(require BASE_PATH.self::CONFIG_FILE); } public static function set($key,$value,$time=null,$unit=null) { self::init(); if ($time) { switch ($unit) { case 'h': $time *= 3600; break; case 'm': $time *= 60; break; case 's': case 'ms': break; default: throw new InvalidArgumentException('單位只能是 h m s ms'); break; } if ($unit=='ms') { self::_psetex($key,$value,$time); } else { self::_setex($key,$value,$time); } } else { self::$redis->set($key,$value); } } public static function get($key) { self::init(); return self::$redis->get($key); } public static function delete($key) { self::init(); return self::$redis->del($key); } private static function _setex($key,$value,$time) { self::$redis->setex($key,$time,$value); } private static function _psetex($key,$value,$time) { self::$redis->psetex($key,$time,$value); } }
新建配置檔案 'config/redis.php':
<?php
return [
'host' => '127.0.0.1',
'port' => 6379
];
然後我們就可以開始測試啦~ 在 'HomeController' 中增加:
use Redis;
Redis::set('key','value',5,'s');
echo Redis::get('key');
執行一次後將上面一行註釋掉,不斷重新整理,看 'value' 是否會在設定的時間結束後從頁面上消失。
程式碼分析
1. 我們建立了 '\Redis' 類,提供了 '::set()'、'::get()' 和 '::delete()' 三個靜態方法,用於新增、獲取和刪除一對 'key-value'。
2. '::set()' 方法支援設定 'key-value' 鍵值對的生命週期,並支援 'h'、'm'、's' 和 'ms' 四個單位,代表時、分、秒和毫秒,這樣就可以方便地用於快取了。
3. 嚴格意義上講,快取類至少還需要一個 '判斷 key 是否還存在' 的基本操作,所以這個類還只是一個略微強大的 Redis 介面。
4. 建造快取介面作為練習,大家可以嘗試自己動手寫一下。選擇新建 Cache 類或者在 Redis 類中新增介面均可。
注,筆者按照以上步驟操作時,提示“Non-static method Redis::set() cannot be called statically, assuming $this from incompatible context”,解決方法是:註釋掉php.ini中的;extension=php_redis.dll,百恩不得解。
(完)