构建自己的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' 是否会在设定的时间结束后从页面上消失。
构建自己的PHP框架(Redis)的更多相关文章
- 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...
		原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ... 
- 利用 Composer 一步一步构建自己的 PHP 框架(二)——构建路由
		本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer 上一篇中我们已经建立了一个空的 Composer 项目 ... 
- 如何构建Android MVVM 应用框架
		概述 说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架.然而两者的概念是不一样的,不能混为一谈.MVVM是一种架构模式,而DataBinding是 ... 
- net 和Mono 构建的HTTP服务框架
		Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATC ... 
- 构建高性能数据库缓存之redis(二)
		一.概述 在构建高性能数据库缓存之redis(一)这篇文档中,阐述了Redis数据库(key/value)的特点.功能以及简单的配置过程,相信阅读过这篇文档的朋友,对Redis数据库会有一点的了解,此 ... 
- 构建Java并发模型框架
		Java的多线程特性为构建高性能的应用提供了极大的方便,但是也带来了不少的麻烦.线程间同步.数据一致性等烦琐的问题需要细心的考虑,一不小心就会出现一些微妙的,难以调试的错误.另外,应用逻辑和线程逻辑纠 ... 
- 构建自己的PHP框架--构建缓存组件(1)
		作为一个框架,我们还没有相应的缓存组件,下面我们就来构建我们的缓存组件. 先来定义一下接口,在 src 文件夹下创建 cache 文件夹,在cache文件夹下创建 CacheInterface.php ... 
- 带你十分钟快速构建好 SpringBoot + SSM 框架
		目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐.而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了 ... 
- 教你构建好 SpringBoot + SSM 框架
		来源:Howie_Y https://juejin.im/post/5b53f677f265da0f8f203914 目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵 ... 
随机推荐
- <h2>1. mongodb介绍</h2>
			1. mongodb介绍 2. ppt下载地址 http://download.csdn.net/detail/u014285882/7807105 阅读全文 本文已收录于下面专栏: mongodb使 ... 
- php 时间戳转为多少分钟前 小时前 天前
			function mdate($time = NULL) { $text = ''; $time = $time === NULL || $time > time() ? time() : in ... 
- Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词
			什么是Sphinx Sphinx 是一个全文检索引擎,一般而言,Sphinx是一个独立的搜索引擎,意图为其它应用提供快速.低空间占用.高结果相关度的全文搜索功能.Sphinx能够很easy的与SQL数 ... 
- ssl 内存泄露
			http://i.mtime.com/chevalier/blog/1824652/ openssl内存分配 chevalier 发布于: 2009-04-20 10:31 openssl内存分配 ... 
- 应用:udp聊天器
			说明 在一个电脑中编写1个程序,有2个功能 1.获取键盘数据,并将其发送给对方 2.接收数据并显示 并且功能数据进行选择以上的2个功能调用 要求 实现上述程序 参考代码 import socketde ... 
- 【Windows Defender Antivirus Service 永久禁用 】
			cmd 管理员运行 执行 reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAn ... 
- PatentTips – CoAP Segment size determination
			BACKGROUND OF THE INVENTION The subject matter disclosed herein relates to routing data through a ne ... 
- js 复制文本的四种方式
			js 复制文本的四种方式 一.总结 一句话总结:js文本复制主流方法:document的execCommand方法 二.js 复制文本的四种方式 纯 转载复制,非原创 原地址:http://www.c ... 
- 5.7-GTID复制搭建
			基本环境 Master Slave MySQL版本 MySQL-5.7.16-X86_64 MySQL-5.7.16-X86_64 IP 192.168.56.156 192.168.56.157 ... 
- echarts改变颜色属性的demo
			一:柱状图改变颜色 图片.png 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ... 
