原文發表在個人我的網站:利用 Composer 完善本身的 PHP 框架(三)——Redis 緩存php
本教程示例代碼見 https://github.com/johnlui/My-First-Framework-based-on-Composerhtml
上兩篇文章中咱們完成了 View 視圖加載類和 Mail 郵件發送類的設計,完成了兩個可插拔組件。本篇文章中咱們將構建另外一個可插拔組件——Redis 接口
,並使用它構建 MFFC
的高速緩存服務。git
Redis
是一個高性能的 key-value
數據庫,其 value
支持 String
、Map(Hash)
、list
、set
和 sorted sets
,中文翻譯爲 字符串、字典(哈希,在世界上最好的語言PHP
中屬於 數組
的一部分)、列表、集合和有序集合。github
咱們能夠用 Redis 做爲高速緩存,存放系統常常須要訪問的數據。相比使用文件做爲緩存,Redis 擁有更高的性能、更好地可維護性和更強大的操做 API。redis
Redis 官網爲 http://redis.io/,能夠很容易地下載安裝並在命令行直接啓動,它默認監聽 6379
端口。數據庫
Redis 服務端裝好並啓動以後,並不能寫一行代碼直接開始使用了,咱們還須要安裝 客戶端
。目前有兩種方式比較推薦:json
注意:做爲 PHP 擴展安裝時,請先打印出
phpinfo()
,找到Loaded Configuration File
這一項,編輯這個php.ini
纔有效。別忘了重啓
Apache 或者 php-fpm。數組
咱們在此選擇 nrk/predis
包做爲 Redis 驅動。編輯 composer.json
:緩存
"require": { "codingbean/macaw": "dev-master", "illuminate/database": "*", "filp/whoops": "*", "nette/mail": "*", "predis/predis": "*" },
運行 composer update
,等待安裝完成。composer
而後咱們就要開始構建 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
中增長:
Redis::set('key','value',5,'s'); echo Redis::get('key');
運行一次後將上面一行註釋掉,不斷刷新,看 value
是否會在設定的時間結束後從頁面上消失。
\Redis
類,提供了 ::set()
、::get()
和 ::delete()
三個靜態方法,用於新增、獲取和刪除一對 key-value
。::set()
方法支持設定 key-value
鍵值對的生命週期,並支持 h
、m
、s
和 ms
四個單位,表明時、分、秒和毫秒,這樣就能夠方便地用於緩存了。判斷 key 是否還存在
的基本操做,因此這個類還只是一個略微強大的 Redis 接口。