Redis基础知识之——自定义封装单实例和普通类Redis

一、普通Redis实例化类:

class MyRedis
{
    private $redis;

    public function __construct($host = '121.41.88.209', $port = 63789)
    {
        $this->redis = new Redis();
        $this->redis->connect($host, $port);
    }

    public function expire($key = null, $time = 0)
    {
        return $this->redis->expire($key, $time);
    }

    public function psubscribe($patterns = array(), $callback)
    {
        $this->redis->psubscribe($patterns, $callback);
    }

    public function setOption()
    {
        $this->redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);
    }

}

二、单例模式Redis实例化类:

<?php
/**
 * Created by PhpStorm.
 * User: Tinywan
 * Date: 2016/7/3
 * Time: 9:26
 * Mail: Overcome.wan@Gmail.com
 * Singleton instance
 */

namespace Org\Util;

class RedisInstance
{
    /**
     * 类对象实例数组,共有静态变量
     * @var null
     */
    private static $_instance;

    /**
     * 数据库连接资源句柄
     * @var
     */
    private static $_connectSource;

    /**
     * 私有化构造函数,防止类外实例化
     * RedisConnect constructor.
     */
    private function __construct()
    {

    }

    /**
     *  单例方法,用于访问实例的公共的静态方法
     * @return \Redis
     * @static
     */
    public static function getInstance()
    {
        if (!(static::$_instance instanceof \Redis)) {
            static::$_instance = new \Redis();
            self::getInstance()->connect(C('MASTER.HOST'), C('MASTER.PORT'), C('MASTER.TIMEOUT'));
        }
        return static::$_instance;
    }

    /**
     * Redis数据库是否连接成功
     * @return bool|string
     */
    public static function connect()
    {
        // 如果连接资源不存在,则进行资源连接
        if (!self::$_connectSource)
        {
            //@return bool TRUE on success, FALSE on error.
            self::$_connectSource = self::getInstance()->connect(C('MASTER.HOST'), C('MASTER.PORT'), C('MASTER.TIMEOUT'));
            // 没有资源返回
            if (!self::$_connectSource)
            {
                return 'Redis Server Connection Fail';
            }
        }
        return self::$_connectSource;
    }

    /**
     * 私有化克隆函数,防止类外克隆对象
     */
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    /**
     * @return \Redis
     * @static
     */
    public static function test()
    {
        return 'test';
    }

 

时间: 2024-10-24 15:01:46

Redis基础知识之——自定义封装单实例和普通类Redis的相关文章

Redis基础知识之—— 缓存应用场景

转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. Memcached服务器使用基于Slab的内存管理方式,有利于减少内存碎片和频繁分配销毁内存所带来的开销.各个Slab按需动态分配一个page的内存(和4Kpage的概念不同,这

Redis基础知识之—— 5个必须了解的事情【★★★★★】

一.掌控储存在Redis中的所有键       数据库的主要功能是储存数据,但是对于开发者来说,因为应用程序需求或者数据使用方法的改变,忽略存储在数据库中的某些数据是非常正常的,在Redis中同样如此.你可能忽视期满某些键,也可能因为应用程序的某个模块弃用而忘掉这些数据.      无论哪种情况,Redis都存储了一些不再使用的数据,平白无故的占用了一些空间.Redis的弱结构数据模式让集中储存的内容很难被弄清,除非你为键使用一套非常成熟的命名法则.使用合适的命名方法会简化你的数据库管理,当你通

Redis基础知识之————php-Redis 常用命令专题

Keys del,delete - 删除键 dump - 返回存储在指定键值的序列化版本. exists - 确定键是否存在 expire,setTimeout,pexpire - 设置键的生存时间(以秒为单位) expireAt,pexpireAt - 将密钥的到期时间设置为UNIX时间戳 keys,getKeys - 查找与给定模式匹配的所有键 scan - 扫描键空间中的键(Redis> = 2.8.0) migrate - 将密钥从Redis实例原子传输到另一个实例 move - 将键移

Redis基础知识之————空间换时间的查询案例

空间与时间 空间换时间是在数据库中经常出现的术语,简单说就是把查询需要的条件进行索引的存储,然后查询时为O(1)的时间复杂度来快速获取数据,从而达到了使用空间存储来换快速的时间响应!对于redis这个k/v存储系统来说,复杂的查询不是它所建议的,它的优势在于通过key快速定位数据,它定位数据的速度与数据多少没有直接关系,无论是1万还是1亿数据,它定位的时间复杂度都是O(1),而在实际使用中,可能不简单使用key定位数据就够了,可能还需要数据里的某个属性去定位数据,这种情况第一感觉不能用redis

Redis基础知识之————如何处理客户端连接

redis 连接建立         Redis Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作: 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型. 然后为这个socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法 然后创建一个 readable 的文件事件用于监听这个客户端 socket 的数据发送 当客户端连

Redis基础知识 之——发布/订阅

一.说明:        订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者).而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅.订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的.这种发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑. 二.发布及订阅功能: 基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求

Redis基础知识之————使用技巧(持续更新中.....)

一.key 设计技巧 把表名转换为key前缀 如, tag: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 第3段放置主键值,如2,3,4...., a , b ,c 第4段,写要存储的列名 Key 不能太长,比如1024字节,但antirez也不喜欢太短如"u:1000:pwd",要表达清楚意思才好.他私人建议用":"分隔域,用"."作为单词间的连接,如"comment:12345:reply.to

C++内核对象封装单实例启动程序的类_C 语言

复制代码 代码如下: //File Name: Singleton.h#pragma once class Singleton{private:    CString strGUID;    CString strMapFileGUID;     HANDLE m_hSingleton; public:    Singleton();    ~Singleton();public:    void AppStart (const HWND & hWnd) const;}; 复制代码 代码如下:

Redis基础知识之—— hset 和hsetnx 的区别

命令参数:HSET key field valueHSETNX key field value 作用区别:HSET 将哈希表 key 中的域 field 的值设为 value .如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作.如果域 field 已经存在于哈希表中,旧值将被覆盖. HSETNX 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在.若域 field 已经存在,该操作无效. 如果 key 不存在,一个新哈希表被创建并执行