zoukankan      html  css  js  c++  java
  • THINKPHP3.2 配置Redis 使用 for windows

    一、Redis 简介

    REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

    Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

        1.Redis 特点

          Redis 与其他 key - value 缓存产品有以下三个特点:

    • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
    • Redis支持数据的备份,即master-slave模式的数据备份。

        2.Redis 优势

    • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
    • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
    • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
    • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

        3.Redis与其他key-value存储有什么不同?

    • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

    • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

    二、Redis 安装

      Window 下安装

      下载地址:https://github.com/MSOpenTech/redis/releases

      Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis

    打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf 。

    如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:

    Redis 安装

    这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。

    切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379 。

    设置键值对 set myKey abc

    取出键值对 get myKey

    Redis 安装

    Redis 安装成服务

    redis-server --service-install redis.windows.conf

    打开运行->输入services.msc 

    三、PHP 连接配置redis

    php5.3   连接使用redis  ,

          1、先下载 phpredis.dll扩展包。下载地址:  https://github.com/nicolasff/phpredis/downloads

           

           用phpinfo 查看到时TS vc9。那么下载的版本就对应好  

       

         2、解压缩之后得到一个文件,分别将两个文件复制到php 目录的 ext目录下。

        

         3、修改php.ini文件。加入extension 扩展 

             extension=php_redis.dll

          4、 重启apache ,查看phpinfo 界面。如下则表示安装成功
       
            

      注:PHP5.4 redis 扩展包是两个文件

          解压缩之后得到两个文件,分别将两个文件复制到php 目录的 ext目录下。

         

          修改php.ini文件。加入extension 扩展 

             extension=php_igbinary.dll
             extension=php_redis.dll

    THINKPHP3.2 中配置

     Redis.class.php 代码
          

    <?php
    // +----------------------------------------------------------------------
    // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
    // +----------------------------------------------------------------------
    // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
    // +----------------------------------------------------------------------
    // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------
    // | Author: liu21st <liu21st@gmail.com>
    // +----------------------------------------------------------------------
    namespace Think\Cache\Driver;
    use Think\Cache;
    defined('THINK_PATH') or exit();
    
    /**
     * Redis缓存驱动 
     * 要求安装phpredis扩展:https://github.com/nicolasff/phpredis
     */
    class Redis extends Cache {
         /**
         * 架构函数
         * @param array $options 缓存参数
         * @access public
         */
        public function __construct($options=array()) {
            if ( !extension_loaded('redis') ) {
                E(L('_NOT_SUPPORT_').':redis');
            }
            $options = array_merge(array (
                'host'          => C('REDIS_HOST') ? : '127.0.0.1',
                'port'          => C('REDIS_PORT') ? : 6379,
                'timeout'       => C('DATA_CACHE_TIMEOUT') ? : false,
                'persistent'    => false,
            ),$options);
    
            $this->options =  $options;
            $this->options['expire'] =  isset($options['expire'])?  $options['expire']  :   C('DATA_CACHE_TIME');
            $this->options['prefix'] =  isset($options['prefix'])?  $options['prefix']  :   C('DATA_CACHE_PREFIX');        
            $this->options['length'] =  isset($options['length'])?  $options['length']  :   0;        
            $func = $options['persistent'] ? 'pconnect' : 'connect';
            $this->handler  = new \Redis;
            $options['timeout'] === false ?
                $this->handler->$func($options['host'], $options['port']) :
                $this->handler->$func($options['host'], $options['port'], $options['timeout']);
        }
    
        /**
         * 读取缓存
         * @access public
         * @param string $name 缓存变量名
         * @return mixed
         */
        public function get($name) {
            N('cache_read',1);
            $value = $this->handler->get($this->options['prefix'].$name);
            $jsonData  = json_decode( $value, true );
            return ($jsonData === NULL) ? $value : $jsonData;    //检测是否为JSON数据 true 返回JSON解析数组, false返回源数据
        }
    
        /**
         * 写入缓存
         * @access public
         * @param string $name 缓存变量名
         * @param mixed $value  存储数据
         * @param integer $expire  有效时间(秒)
         * @return boolean
         */
        public function set($name, $value, $expire = null) {
            N('cache_write',1);
            if(is_null($expire)) {
                $expire  =  $this->options['expire'];
            }
            $name   =   $this->options['prefix'].$name;
            //对数组/对象数据进行缓存处理,保证数据完整性
            $value  =  (is_object($value) || is_array($value)) ? json_encode($value) : $value;
            if(is_int($expire) && $expire) {
                $result = $this->handler->setex($name, $expire, $value);
            }else{
                $result = $this->handler->set($name, $value);
            }
            if($result && $this->options['length']>0) {
                // 记录缓存队列
                $this->queue($name);
            }
            return $result;
        }
    
        /**
         * 删除缓存
         * @access public
         * @param string $name 缓存变量名
         * @return boolean
         */
        public function rm($name) {
            return $this->handler->delete($this->options['prefix'].$name);
        }
    
        /**
         * 清除缓存
         * @access public
         * @return boolean
         */
        public function clear() {
            return $this->handler->flushDB();
        }
    
    }
  • 相关阅读:
    HDU 1242——Rescue(优先队列)
    [LeetCode] Rectangle Area
    iOS 开发百问(6)
    lucene入门查询索引——(三)
    lucene入门创建索引——(二)
    lucene简介——(一)
    Java基础打包以及批处理命令运行
    Maven从私服上下载所需jar包——(十四)
    Maven部署dao工程到私服上——(十三)
    Maven私服安装及配置——(十二)
  • 原文地址:https://www.cnblogs.com/kingchou/p/7263117.html
Copyright © 2011-2022 走看看