CI框架中redis缓存相关操作文件示例代码

1137次阅读  |  发布于5年以前

本文实例讲述了CI框架中redis缓存相关操作文件。分享给大家供大家参考,具体如下:

redis缓存类文件位置:

'ci\system\libraries\Cache\drivers\Cache_redis.php'


    <?php
    /**
     * CodeIgniter
     *
     * An open source application development framework for PHP 5.2.4 or newer
     *
     * NOTICE OF LICENSE
     *
     * Licensed under the Open Software License version 3.0
     *
     * This source file is subject to the Open Software License (OSL 3.0) that is
     * bundled with this package in the files license.txt / license.rst. It is
     * also available through the world wide web at this URL:
     * http://opensource.org/licenses/OSL-3.0
     * If you did not receive a copy of the license and are unable to obtain it
     * through the world wide web, please send an email to
     * licensing@ellislab.com so we can send you a copy immediately.
     *
     * @package   CodeIgniter
     * @author   EllisLab Dev Team
     * @copyright  Copyright (c) 2008 - 2014, EllisLab, Inc. (http://ellislab.com/)
     * @license   http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
     * @link    http://codeigniter.com
     * @since    Version 3.0
     * @filesource
     */
    defined('BASEPATH') OR exit('No direct script access allowed');
    /**
     * CodeIgniter Redis Caching Class
     *
     * @package  CodeIgniter
     * @subpackage Libraries
     * @category  Core
     * @author   Anton Lindqvist <anton@qvister.se>
     * @link
     */
    class CI_Cache_redis extends CI_Driver
    {
      /**
       * Default config
       *
       * @static
       * @var array
       */
      protected static $_default_config = array(
        /*
        'socket_type' => 'tcp',
        'host' => '127.0.0.1',
        'password' => NULL,
        'port' => 6379,
        'timeout' => 0
        */
      );
      /**
       * Redis connection
       *
       * @var Redis
       */
      protected $_redis;
      /**
       * Get cache
       *
       * @param  string like *$key*
       * @return array(hash)
       */
      public function keys($key)
      {
        return $this->_redis->keys($key);
      }
      /**
       * Get cache
       *
       * @param  string Cache ID
       * @return mixed
       */
      public function get($key)
      {
        return $this->_redis->get($key);
      }
      /**
       * mGet cache
       *
       * @param  array  Cache ID Array
       * @return mixed
       */
      public function mget($keys)
      {
        return $this->_redis->mget($keys);
      }
      /**
       * Save cache
       *
       * @param  string $id Cache ID
       * @param  mixed  $data  Data to save
       * @param  int $ttl  Time to live in seconds
       * @param  bool  $raw  Whether to store the raw value (unused)
       * @return bool  TRUE on success, FALSE on failure
       */
      public function save($id, $data, $ttl = 60, $raw = FALSE)
      {
        return ($ttl)
          ? $this->_redis->setex($id, $ttl, $data)
          : $this->_redis->set($id, $data);
      }
      /**
       * Delete from cache
       *
       * @param  string Cache key
       * @return bool
       */
      public function delete($key)
      {
        return ($this->_redis->delete($key) === 1);
      }
      /**
       * hIncrBy a raw value
       *
       * @param  string $id Cache ID
       * @param  string $field Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hincrby($key, $field, $value = 1)
      {
        return $this->_redis->hIncrBy($key, $field, $value);
      }
      /**
       * hIncrByFloat a raw value
       *
       * @param  string $id Cache ID
       * @param  string $field Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hincrbyfloat($key, $field, $value = 1)
      {
        return $this->_redis->hIncrByFloat($key, $field, $value);
      }
      /**
       * lpush a raw value
       *
       * @param  string $key  Cache ID
       * @param  string $value value
       * @return mixed  New value on success or FALSE on failure
       */
      public function lpush($key, $value)
      {
        return $this->_redis->lPush($key, $value);
      }
       /**
       * rpush a raw value
       *
       * @param  string $key  Cache ID
       * @param  string $value value
       * @return mixed  New value on success or FALSE on failure
       */
      public function rpush($key, $value)
      {
        return $this->_redis->rPush($key, $value);
      }
      /**
       * rpop a raw value
       *
       * @param  string $key  Cache ID
       * @param  string $value value
       * @return mixed  New value on success or FALSE on failure
       */
      public function rpop($key)
      {
        return $this->_redis->rPop($key);
      }
       /**
       * brpop a raw value
       *
       * @param  string $key  Cache ID
       * @param  string $ontime 阻塞等待时间
       * @return mixed  New value on success or FALSE on failure
       */
      public function brpop($key,$ontime=0)
      {
        return $this->_redis->brPop($key,$ontime);
      }
      /**
       * lLen a raw value
       *
       * @param  string $key  Cache ID
       * @return mixed  Value on success or FALSE on failure
       */
      public function llen($key)
      {
        return $this->_redis->lLen($key);
      }
      /**
       * Increment a raw value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function increment($id, $offset = 1)
      {
        return $this->_redis->exists($id)
          ? $this->_redis->incr($id, $offset)
          : FALSE;
      }
      /**
       * incrby a raw value
       *
       * @param  string $key Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function incrby($key, $value = 1)
      {
        return $this->_redis->incrby($key, $value);
      }
      /**
       * set a value expire time
       *
       * @param  string $key Cache ID
       * @param  int $seconds expire seconds
       * @return mixed  New value on success or FALSE on failure
       */
      public function expire($key, $seconds)
      {
        return $this->_redis->expire($key, $seconds);
      }
      /**
       * Increment a raw value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hset($alias,$key, $value)
      {
        return $this->_redis->hset($alias,$key, $value);
      }
      /**
       * Increment a raw value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hget($alias,$key)
      {
        return $this->_redis->hget($alias,$key);
      }
      /**
       * Increment a raw value
       *
       * @param  string $id Cache ID
       * @return mixed  New value on success or FALSE on failure
       */
      public function hkeys($alias)
      {
        return $this->_redis->hkeys($alias);
      }
      /**
       * Increment a raw value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hgetall($alias)
      {
        return $this->_redis->hgetall($alias);
      }
      /**
       * Increment a raw value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hmget($alias,$key)
      {
        return $this->_redis->hmget($alias,$key);
      }
      /**
       * del a key value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hdel($alias,$key)
      {
        return $this->_redis->hdel($alias,$key);
      }
      /**
       * del a key value
       *
       * @param  string $id Cache ID
       * @return mixed  New value on success or FALSE on failure
       */
      public function hvals($alias)
      {
        return $this->_redis->hvals($alias);
      }
      /**
       * Increment a raw value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to add
       * @return mixed  New value on success or FALSE on failure
       */
      public function hmset($alias,$array)
      {
        return $this->_redis->hmset($alias,$array);
      }
      /**
       * Decrement a raw value
       *
       * @param  string $id Cache ID
       * @param  int $offset Step/value to reduce by
       * @return mixed  New value on success or FALSE on failure
       */
      public function decrement($id, $offset = 1)
      {
        return $this->_redis->exists($id)
          ? $this->_redis->decr($id, $offset)
          : FALSE;
      }
      /**
       * Clean cache
       *
       * @return bool
       * @see   Redis::flushDB()
       */
      public function clean()
      {
        return $this->_redis->flushDB();
      }
      /**
       * Get cache driver info
       *
       * @param  string Not supported in Redis.
       *     Only included in order to offer a
       *     consistent cache API.
       * @return array
       * @see   Redis::info()
       */
      public function cache_info($type = NULL)
      {
        return $this->_redis->info();
      }
      /**
       * Get cache metadata
       *
       * @param  string Cache key
       * @return array
       */
      public function get_metadata($key)
      {
        $value = $this->get($key);
        if ($value)
        {
          return array(
            'expire' => time() + $this->_redis->ttl($key),
            'data' => $value
          );
        }
        return FALSE;
      }
      /**
       * Check if Redis driver is supported
       *
       * @return bool
       */
      public function is_supported()
      {
        if (extension_loaded('redis'))
        {
          return $this->_setup_redis();
        }
        else
        {
          log_message('debug', 'The Redis extension must be loaded to use Redis cache.');
          return FALSE;
        }
      }
      /**
       * Setup Redis config and connection
       *
       * Loads Redis config file if present. Will halt execution
       * if a Redis connection can't be established.
       *
       * @return bool
       * @see   Redis::connect()
       */
      protected function _setup_redis()
      {
        $config = array();
        $CI =& get_instance();
        if ($CI->config->load('redis', TRUE, TRUE))
        {
          $config += $CI->config->item('redis');
        }
        $config = array_merge(self::$_default_config, $config);
        $config = !empty($config['redis'])?$config['redis']:$config;
        $this->_redis = new Redis();
        try
        {
          if ($config['socket_type'] === 'unix')
          {
            $success = $this->_redis->connect($config['socket']);
          }
          else // tcp socket
          {
            $success = $this->_redis->connect($config['host'], $config['port'], $config['timeout']);
          }
          if ( ! $success)
          {
            log_message('debug', 'Cache: Redis connection refused. Check the config.');
            return FALSE;
          }
        }
        catch (RedisException $e)
        {
          log_message('debug', 'Cache: Redis connection refused ('.$e->getMessage().')');
          return FALSE;
        }
        if (isset($config['password']))
        {
          $this->_redis->auth($config['password']);
        }
        return TRUE;
      }
      /**
       * Class destructor
       *
       * Closes the connection to Redis if present.
       *
       * @return void
       */
      public function __destruct()
      {
        if ($this->_redis)
        {
          $this->_redis->close();
        }
      }
    }
    /* End of file Cache_redis.php */
    /* Location: ./system/libraries/Cache/drivers/Cache_redis.php */

更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《php缓存技术总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8