php 封装 到redis,PHPRedis封装类完整实例 - key

58e8d81c4a0d115f2a9f9f245fa77d87.png

...Hash表的功能。PHP可以模拟实现Hash表的增删改查。通过对key的映射到数组中的一个位置来访问。映射函数叫做Hash函数,存放记录的数组称为Hash表。

Hash函数把任意长度的和类型的key转换成固定长度输出。不同的key可能拥有相同的...

本文通过摘录,旨为收藏经典。望一起分享共论。

class RedisCluster{

// 是否使用 M/S 的读写集群方案

private isUseCluster=false;//Slave句柄标记private_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_sn; ++$i){

$this->_linkHandle['slave'][$i]->close();

}

break;

// 关闭所有

case 1:

$this->getRedis()->close();

for($i=0; $i_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;$igetRedis()->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();

}

}').addClass('pre-numbering').hide();

$(this).addClass('has-numbering').parent().append($numbering);

for (i = 1; i <= lines; i++) {

$numbering.append($('

').text(i));

};

$numbering.fadeIn(1700);

});

});

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

...Hash表的功能。PHP可以模拟实现Hash表的增删改查。通过对key的映射到数组中的一个位置来访问。映射函数叫做Hash函数,存放记录的数组称为Hash表。

Hash函数把任意长度的和类型的key转换成固定长度输出。不同的key可能拥有相同的...

.../li>对value操作的命令exists(key):确认一个key是否存在del(key):删除一个keytype(key):返回值的类型keys(pattern):返回满足给定pattern的所有keyrandomkey:随机...

...p.put("c","C");

map.get("a"); //返回:A

map.entrySet() // 返回Entity[{key,value},{key,value}]

map.containsKey('kevin') //返回:false

function Map() {

##常用结构及命令:

keys * #查询所有key

randomkey  #随机返回key

type key  #返回key的类型

exists ...

... ><?php

//有一个多维数组

$a = array(

array('key1'=>940, 'key2'=>'blah'),

array('key1'=>23, 'key2'=

...,不会被其他命令插入。高并发下不存在竞态条件。

KEY的命名:一个良好的建议是article:1:title来存储ID为1的文章的标题。

一、前言。

1、获取key的列表:KEYS pattern 通配符有?*[]和转义\

2、key是否存在:

先说redisredis是一个类似memcached的key/value存储系统,它支持存储的value类型相对较多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保...

...mpty($arrayOptionsId) ) {$pingheFraction = "";foreach( $arrayOptionsId as $key=>$value ) {//echo "key:".$key."--".$value."";print_r($arrayOptionsId

...ty($arrayOptionsId) ) {

$pingheFraction = "";

foreach( $arrayOptionsId as $key=>$value ) {

//echo "key:".$key."--".$value."";

print_r($arrayOptions

...is服务器

对value操作的命令

exists(key):确认一个key是否存在

del(key):删除一个key

type(key):返回值的类型

keys(pattern):返回满足给定pattern的所有key

randomkey:随机返回key空间的一个

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值