0

0

PHPRedis封装类完整实例

php中文网

php中文网

发布时间:2016-07-29 09:00:47

|

1506人浏览过

|

来源于php中文网

原创

PHPRedis封装类完整实例

本文通过摘录,旨为收藏经典。望一起分享共论。
class RedisCluster{
// 是否使用 M/S 的读写集群方案
private isUseCluster=false;//Slaveprivate_sn = 0;
// 服务器连接句柄
private $_linkHandle = array(
‘master’=>null,// 只支持一台 Master
‘slave’=>array(),// 可以有多台 Slave
);

/**
 * 构造函数
 * @param boolean $isUseCluster 是否采用 M/S 方案
 */
public function __construct($isUseCluster=false){
    $this->_isUseCluster = $isUseCluster;
}
/**
 * 连接服务器,注意:这里使用长连接,提高效率,但不会自动关闭
 *
 * @param array $config Redis服务器配置
 * @param boolean $isMaster 当前添加的服务器是否为 Master 服务器
 * @return boolean
 */
public function connect($c $isMaster=true){
    // default port
    if(!isset($config['port'])){
        $config['port'] = 6379;
    }
    // 设置 Master 连接
    if($isMaster){
        $this->_linkHandle['master'] = new Redis();
        $ret = $this->_linkHandle['master']->pconnect($config['host'],$config['port']);
    }else{
        // 多个 Slave 连接
        $this->_linkHandle['slave'][$this->_sn] = new Redis();
        $ret = $this->_linkHandle['slave'][$this->_sn]->pconnect($config['host'],$config['port']);
        ++$this->_sn;
    }
    return $ret;
}
/**
 * 关闭连接
 *
 * @param int $flag 关闭选择 0:关闭 Master 1:关闭 Slave 2:关闭所有
 * @return boolean
 */
public function close($flag=2){
    switch($flag){
        // 关闭 Master
        case 0:
            $this->getRedis()->close();
            break;
        // 关闭 Slave
        case 1:
            for($i=0; $i<$this->_sn; ++$i){
                $this->_linkHandle['slave'][$i]->close();
            }
            break;
        // 关闭所有
        case 1:
            $this->getRedis()->close();
            for($i=0; $i<$this->_sn; ++$i){
                $this->_linkHandle['slave'][$i]->close();
            }
            break;
    }
    return true;
}
/**
 * 得到 Redis 原始对象可以有更多的操作
 *
 * @param boolean $isMaster 返回服务器的类型 true:返回Master false:返回Slave
 * @param boolean $slaveOne 返回的Slave选择 true:负载均衡随机返回一个Slave选择 false:返回所有的Slave选择
 * @return redis object
 */
public function getRedis($isMaster=true,$slave
    // 只返回 Master
    if($isMaster){
        return $this->_linkHandle['master'];
    }else{
        return $slaveOne ? $this->_getSlaveRedis() : $this->_linkHandle['slave'];
    }
}
/**
 * 写缓存
 *
 * @param string $key 组存KEY
 * @param string $value 缓存值
 * @param int $expire 过期时间, 0:表示无过期时间
 */
public function set($key, $value, $expire=0){
    // 永不超时
    if($expire == 0){
        $ret = $this->getRedis()->set($key, $value);
    }else{
        $ret = $this->getRedis()->setex($key, $expire, $value);
    }
    return $ret;
}
/**
 * 读缓存
 *
 * @param string $key 缓存KEY,支持一次取多个 $key = array('key1','key2')
 * @return string || boolean 失败返回 false, 成功返回字符串
 */
public function get($key){
    // 是否一次取多个值
    $func = is_array($key) ? 'mGet' : 'get';
    // 没有使用M/S
    if(! $this->_isUseCluster){
        return $this->getRedis()->{$func}($key);
    }
    // 使用了 M/S
    return $this->_getSlaveRedis()->{$func}($key);
}
/**
 * 条件形式设置缓存,如果 key 不存时就设置,存在时设置失败
 *
 * @param string $key 缓存KEY
 * @param string $value 缓存值
 * @return boolean
 */
public function setnx($key, $value){
    return $this->getRedis()->setnx($key, $value);
}
/**
 * 删除缓存
 *
 * @param string || array $key 缓存KEY,支持单个健:"key1" 或多个健:array('key1','key2')
 * @return int 删除的健的数量
 */
public function remove($key){
    // $key => "key1" || array('key1','key2')
    return $this->getRedis()->delete($key);
}
/**
 * 值加加操作,类似 ++$i ,如果 key 不存在时自动设置为 0 后进行加加操作
 *
 * @param string $key 缓存KEY
 * @param int $default 操作时的默认值
 * @return int 操作后的值
 */
public function incr($key,$default=1){
    if($default == 1){
        return $this->getRedis()->incr($key);
    }else{
        return $this->getRedis()->incrBy($key, $default);
    }
}
/**
 * 值减减操作,类似 --$i ,如果 key 不存在时自动设置为 0 后进行减减操作
 *
 * @param string $key 缓存KEY
 * @param int $default 操作时的默认值
 * @return int 操作后的值
 */
public function decr($key,$default=1){
    if($default == 1){
        return $this->getRedis()->decr($key);
    }else{
        return $this->getRedis()->decrBy($key, $default);
    }
}
/**
 * 添空当前数据库
 *
 * @return boolean
 */
public function clear(){
    return $this->getRedis()->flushDB();
}
/* =================== 以下私有方法 =================== */
/**
 * 随机 HASH 得到 Redis Slave 服务器句柄
 *
 * @return redis object
 */
private function _getSlaveRedis(){
    // 就一台 Slave 机直接返回
    if($this->_sn <= 1){
        return $this->_linkHandle['slave'][0];
    }
    // 随机 Hash 得到 Slave 的句柄
    $hash = $this->_hashId(mt_rand(), $this->_sn);
    return $this->_linkHandle['slave'][$hash];
}
/**
 * 根据ID得到 hash 后 0~m-1 之间的值
 *
 * @param string $id
 * @param int $m
 * @return int
 */
private function _hashId($id,$m=10)
{
    //把字符串K转换为 0~m-1 之间的一个值作为对应记录的散列地址
    $k = md5($id);
    $l = strlen($k);
    $b = bin2hex($k);
    $h = 0;
    for($i=0;$i<$l;$i++)
    {
        //相加模式HASH
        $h += substr($b,$i*2,2);
    }
    $hash = ($h*1)%$m;
    return $hash;
}
/**
 *  lpush
 */
public function lpush($key,$value){
    return $this->getRedis()->lpush($key,$value);
}
/**
 *  add lpop
 */
public function lpop($key){
    return $this->getRedis()->lpop($key);
}
/**
 * lrange
 */
public function lrange($key,$start,$end){
    return $this->getRedis()->lrange($key,$start,$end);
}
/**
 *  set hash opeation
 */
public function hset($name,$key,$value){
    if(is_array($value)){
        return $this->getRedis()->hset($name,$key,serialize($value));
    }
    return $this->getRedis()->hset($name,$key,$value);
}
/**
 *  get hash opeation
 */
public function hget($name,$key = null,$serialize=true){
    if($key){
        $row = $this->getRedis()->hget($name,$key);
        if($row && $serialize){
            unserialize($row);
        }
        return $row;
    }
    return $this->getRedis()->hgetAll($name);
}
/**
 *  delete hash opeation
 */
public function hdel($name,$key = null){
    if($key){
        return $this->getRedis()->hdel($name,$key);
    }
    return $this->getRedis()->hdel($name);
}
/**
 * Transaction start
 */
public function multi(){
    return $this->getRedis()->multi();
}
/**
 * Transaction send
 */
public function exec(){
    return $this->getRedis()->exec();
}

}

晴软校园订餐系统 2007版
晴软校园订餐系统 2007版

校园订餐网2007版,其主要特点是功能简单实用。并且经过了一些大学的进行试点成功,已正式发布。整套程序由ASP+JAVASCRIPT完成的,没有DLL封装,源码完全开放便于用户做二次开发。主要针对客户群体是在校的大学生及在校傍边的餐饮店,因此功能针对性强,且价格低廉。初始管理员帐户为:admin密码:admin

下载

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了PHPRedis封装类完整实例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

797

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

272

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

144

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

25

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

92

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

53

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

717

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

64

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
JavaScript高级框架设计视频教程
JavaScript高级框架设计视频教程

共22课时 | 3.6万人学习

深入剖析redis教程
深入剖析redis教程

共55课时 | 8.2万人学习

Redis中文开发手册
Redis中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号