构建自己的PHP框架(Redis)
完整项目地址:https://github.com/Evai/Aier
Redis 简介
'Redis' 是一个高性能的 'key-value' 数据库,其 'value' 支持 'String'、'Map(Hash)'、'list'、'set' 和 'sorted sets',中文翻译为 字符串、字典(哈希,在'世界上最好的语言PHP' 中属于 '数组' 的一部分)、列表、集合和有序集合。
我们可以用 Redis 作为高速缓存,存放系统经常需要访问的数据。相比使用文件作为缓存,Redis 拥有更高的性能、更好地可维护性和更强大的操作 API。
Redis 安装
Redis 官网为 http://redis.io/ ,可以很容易地下载安装并在命令行直接启动,它默认监听 '6379' 端口。
Redis 服务端装好并启动之后,并不能写一行代码直接开始使用了,我们还需要安装 '客户端'。目前有两种方式比较推荐:
1. 安装 PHP 的 Redis 扩展。
2. 使用 nrk/predis 包。
注意:作为 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; /** * Redis constructor. */ private static function init() { self::$redis = new Client(require BASE_PATH . self::CONFIG_FILE); } /** * @param $key * @param $value * @param int $timeout * @param string $unit * @return mixed */ public static function set($key, $value, $timeout = 0, $unit = 's') { self::init(); $result = self::$redis->set($key, $value); if ($timeout > 0) { switch ($unit) { case 's': //秒 self::$redis->expire($key, $timeout); break; case 'unix': //unix时间戳(单位:秒) self::$redis->expireAt($key, $timeout); break; case 'ms': //毫秒 self::$redis->pExpire($key, $timeout); break; case 'munix': //unix时间戳(单位:毫秒) self::$redis->pExpireAt($key, $timeout); break; default: break; } } return $result; } /** * @param $key * @return string */ public static function get($key) { self::init(); return self::$redis->get($key); } /** * @param $key * @return mixed */ public static function delete($key) { self::init(); return self::$redis->del($key); } }
新建配置文件 'config/redis.php':
<?php return [ 'host' => '127.0.0.1', 'password' => null, 'port' => 6379, 'database' => 0 ];
然后我们就可以开始测试啦~ 在 'HomeController' 中增加:
Redis::set('name', 'Evai', 5); echo Redis::get('name');
运行一次后将上面一行注释掉,不断刷新,看 'value' 是否会在设定的时间结束后从页面上消失。