完整项目地址: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' 是否会在设定的时间结束后从页面上消失。

构建自己的PHP框架(Redis)的更多相关文章

  1. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  2. 利用 Composer 一步一步构建自己的 PHP 框架(二)——构建路由

    本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer 上一篇中我们已经建立了一个空的 Composer 项目 ...

  3. 如何构建Android MVVM 应用框架

    概述 说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架.然而两者的概念是不一样的,不能混为一谈.MVVM是一种架构模式,而DataBinding是 ...

  4. net 和Mono 构建的HTTP服务框架

    Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATC ...

  5. 构建高性能数据库缓存之redis(二)

    一.概述 在构建高性能数据库缓存之redis(一)这篇文档中,阐述了Redis数据库(key/value)的特点.功能以及简单的配置过程,相信阅读过这篇文档的朋友,对Redis数据库会有一点的了解,此 ...

  6. 构建Java并发模型框架

    Java的多线程特性为构建高性能的应用提供了极大的方便,但是也带来了不少的麻烦.线程间同步.数据一致性等烦琐的问题需要细心的考虑,一不小心就会出现一些微妙的,难以调试的错误.另外,应用逻辑和线程逻辑纠 ...

  7. 构建自己的PHP框架--构建缓存组件(1)

    作为一个框架,我们还没有相应的缓存组件,下面我们就来构建我们的缓存组件. 先来定义一下接口,在 src 文件夹下创建 cache 文件夹,在cache文件夹下创建 CacheInterface.php ...

  8. 带你十分钟快速构建好 SpringBoot + SSM 框架

    目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐.而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了 ...

  9. 教你构建好 SpringBoot + SSM 框架

    来源:Howie_Y https://juejin.im/post/5b53f677f265da0f8f203914 目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵 ...

随机推荐

  1. JavaWeb网站技术架构

    JavaWeb网站技术架构总结   题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充 ...

  2. ZOJ FatMouse' Trade 贪心

    得之我幸,不得,我命.仅此而已. 学姐说呀,希望下次看到你的时候依然潇洒如故.(笑~) 我就是这么潇洒~哈哈. 感觉大家比我还紧张~ 我很好的.真的 ------------------------- ...

  3. VCS编译仿真警告Warning

    VCS编译仿真警告Warning 问题描述 在较大的SOC集成中,通常使用Perl脚本例化子模块到Top层,然而,有时会出现例化出来的输入端口名没有在Top层定义,而且端口的位宽为1bit,那么,ve ...

  4. 【源代码】Timer和TimerTask源代码剖析

    Timer是java.util包中的一个工具类,提供了定时器的功能. 我们能够构造一个Timer对象,然后调用其schedule方法在某个特定的时间或者若干延时之后去运行一个特定的任务.甚至你能够让其 ...

  5. 无线物联网中CoAP协议的研究与实现【转】

    无线物联网中CoAP协议的研究与实现 时间:2013-04-09 来源:电子科技 作者:汤春明,张 荧,吴宇平 关键字:CoAP   无线   物联网   协议 摘要:由于物联网中的很多设备都是资源受 ...

  6. Struts2与Spring的整合

    今天倒腾了半天,终于是把这个两个框架整合到一起了.还是要写一下总结,同时给大家一些帮助. 开发环境:myeclipse 9.0(不好用!)tomcat6.0 1.准备工作 需要导入的包:struts2 ...

  7. Tricks(四十九)—— 按 batch 访问越界的解决办法

    使用 min 函数指定访问的最终位置,本质上是增加一个条件判断: done = false; batch_size = 10000; idx = 1; while ~done idx_end = mi ...

  8. 编辑器vim简介

    vi简介 vi是"Visual interface"的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样.它可以执行输出.删除.查找.替换.块操作等众多文本操作,而且用户 ...

  9. 【codeforces 762A】k-th divisor

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  10. PatentTips - Hardware virtualization such as separation kernel hypervisors

    BACKGROUND 1. Field Innovations herein pertain to computer virtualization, computer security and/or ...