Files
wy/ZeedFramework/library/Zeed/Db/Model/Redis.php

521 lines
12 KiB
PHP
Raw Normal View History

2026-01-07 11:40:41 +08:00
<?php
/**
* Zeed Platform Project
* Based on Zeed Framework & Zend Framework.
*
* LICENSE
* http://www.zeed.com.cn/license/
*
* @category Zeed
* @package Zeed_ChangeMe
* @subpackage ChangeMe
* @copyright Copyright (c) 2010 Zeed Technologies PRC Inc. (http://www.zeed.com.cn)
* @author Zeed Team (http://blog.zeed.com.cn)
* @since 2011-5-18
* @version SVN: $Id$
*/
class Zeed_Db_Model_Redis
{
/**
* @var config
*/
protected $_config = null;
/**
* @var RedisCollection
*/
protected $collection = null;
/**
* 数据库连接实例缓存
*
* @var array
*/
protected static $instanceInternalCache = array();
public function __construct ($config = array())
{
$this->_config = Zeed_Config::loadGroup('database.redis');
$this->collection = $this->connect($this->_config['host'], $this->_config['port']);
$this->collection->select($this->_config['db']);
}
/**
* 数据库连接实例缓存
*
* @var array
*/
protected static $connections = null;
/**
* @return Redis
*/
protected function connect ($host, $port)
{
self::$connections[$host] = new redis();
self::$connections[$host]->connect($host, $port);
return self::$connections[$host];
}
/**
* 判断key是否存在
*
* @param string $key/存储键名
* @return boolean
*/
public function exists ($key)
{
return $this->collection->exists($key);
}
/**
* 设置值
*
* @param string $key/存储键名
* @param array $value/存储数据
* @return string
*/
public function set ($key, $value)
{
$ret = $this->collection->set($key, $value);
if (is_int($this->_config['expire']) && $this->_config['expire']) {
$this->collection->expire($key, $this->_config['expire']);
}
return $ret;
}
/**
* 读取值
*
* @param string $key/存储键名
* @return string
*/
public function get ($key, $expire = TRUE)
{
$ret = $this->collection->get($key);
if ($expire && is_int($this->_config['expire']) && $this->_config['expire']) {
$this->collection->expire($key, $this->_config['expire']);
}
return $ret;
}
/**
* list 入队列 返回已进入当前队列的元素数量
*
* @param string $key/存储键名
* @param string $value/存储值
* @return int/执行命令后,列表的长度
*/
public function rpush ($key, $value)
{
return $this->collection->rpush($key, $value);
}
/**
* key 中的值自增 1
*
* @param string $key
* @return string
*/
public function incr ($key)
{
return $this->collection->incr($key);
}
/**
* key 中的值,自增第二个参数所填的值
*
* @param string $key
* @param integer $val
* @return string
*/
public function incrby ($key, $val)
{
return $this->collection->incrby($key, $val);
}
/**
* list 出队列
*
* @param string $key/存储键名
* @return string
*/
public function lpop ($key)
{
return $this->collection->lpop($key);
}
/**
* list 删除元素
*
* @param string $key/存储键名
* @param string $value/存储值
* @return int/被移除元素的数量
*/
public function lrem ($key, $value)
{
return $this->collection->lrem($key, $value, 0);
}
/**
* list 查询队列
*
* @param string $key/存储键名
* @param int $index/队列索引
* 0表示第一个
* -1表示最后一个
* @return string
*/
public function lindex ($key, $index)
{
return $this->collection->lindex($key, $index);
}
/**
* list 遍历
*
* @param string $key/存储键名
* @return array
*/
public function lrange ($key)
{
return $this->collection->lrange($key, 0, - 1);
}
/**
* list 返回元素的数量
*
* @param string $key/存储键名
* @return int
*/
public function llen ($key)
{
return $this->collection->llen($key);
}
/**
* 返回名称为key的list有多少个元素
*
* @param string $key/存储键名
* @return int
*/
public function lsize ($key)
{
return $this->collection->lsize($key);
}
/**
* hash 设置值
*
* @param string $key/存储键名
* @param array $value/存储数据
* @return string
*/
public function hmset ($key, $value)
{
return $this->collection->hmset($key, $value);
}
/**
* hash 读取值
*
* @param string $key/存储键名
* @param array $value/存储数据
* @return string
*/
public function hmget ($key, $arr)
{
return $this->collection->hmget($key, $arr);
}
/**
* hash 设置值
*
* @param string $h
* @param string $key
* @param string $val
* @return string
*/
public function hset ($h, $key, $val)
{
return $this->collection->hset($h, $key, $val);
}
/**
* hash 读取值
*
* @param string $h
* @param string $key
* @return string
*/
public function hget ($h, $key)
{
return $this->collection->hget($h, $key);
}
/**
* hash 读取值
*
* @param string $key/存储键名
* @return string
*/
public function hgetall ($key, $expire = TRUE)
{
$ret = $this->collection->hgetall($key);
if ($expire && is_int($this->_config['expire']) && $this->_config['expire']) {
$this->collection->expire($key, $this->_config['expire']);
}
return $ret;
}
/**
* hash 删除 key中的一个或多个指定域不存在的域将被忽略
*
* @param string $key/存储键名
* @param string $field/域名
* @return int/被成功移除的域的数量,不包括被忽略的域
*/
public function hdel ($key, $domain)
{
return $this->collection->hdel($key, $domain);
}
/**
* set 设置值
*
* @param string $key/存储键名
* @param array $value/存储数据
* @return int 0,1
*/
public function sadd ($key, $value)
{
return $this->collection->sadd($key, $value);
}
/**
* set 移除元素
*
* @param string $key/存储键名
* @param array $value/元素名称
* @return int/被成功移除的元素的数量,不包括被忽略的元素
*/
public function srem ($key, $value)
{
return $this->collection->srem($key, $value);
}
/**
* set 返回集合所有信息
*
* @param string $key/存储键名
* @return array
*/
public function smembers ($key)
{
return $this->collection->smembers($key);
}
/**
* set 返回交集信息
*
* @param string $arrKey/需查询的交集key
* @return array
*/
public function sinter ($arrKey)
{
return $this->collection->sinter($arrKey);
}
/**
* set 返回差集信息
*
* @param string $arrKey/需查询的差集key
* @return array
*/
public function sdiff ($arrKey)
{
return $this->collection->sdiff($arrKey);
}
/**
* set 返回并集信息
*
* @param string $arrKey/需查询的并集key
* @return array
*/
public function sunion ($arrKey)
{
return $this->collection->sunion($arrKey);
}
/**
* zset 设置值
*
* @param string $key/存储键名
* @param string $score/存储的排序值(一般我用时间戳)
* @param string $value/存储数据
* @return int 被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员
*/
public function zadd ($key, $score, $value)
{
return $this->collection->zadd($key, $score, $value);
}
/**
* zset 返回列表 从大到小排序
*
* @param string $key/存储键名
* @param int $start/第几个开始显示
* @param int $end/结束位置-1为全长度
* @param boolean $withscores/是否显示score值
* @return array/指定区间内,带有 score (可选)的有序集成员的列表
*/
public function zrevrange ($key, $start, $end, $withscores = FALSE)
{
return $this->collection->zrevrange($key, $start, $end, $withscores);
}
/**
* zset 返回列表 从小到大排序
*
* @param string $key/存储键名
* @param int $start/第几个开始显示
* @param int $end/结束位置-1为全长度
* @param boolean $withscores/是否显示score值
* @return array/指定区间内,带有 score (可选)的有序集成员的列表
*/
public function zrange ($key, $start, $end, $withscores = FALSE)
{
return $this->collection->zrange($key, $start, $end, $withscores);
}
/**
* zset 返回并集数据
*
* @param string $arrKey/需查询的并集key
* @param int $start/第几个开始显示
* @param int $end/结束位置-1为全长度
* @return array
*/
public function zunion ($arrKey, $start, $end)
{
$redisData = $this->collection->multi()
->zunionstore('tempKey', $arrKey)
->zrevrange('tempKey', $start, $end)
->del('tempKey')
->exec(); // 事务模式
return $redisData[1]; // 获取第二个命令执行的数据
}
/**
* 删除键
*
* @param string $key/存储键名
* @param
* @return boolean
*/
public function del ($key)
{
return $this->collection->del($key);
}
/**
* 选择一个数据库
*/
public function select($database)
{
$ret = $this->collection->select($database);
return $ret;
}
/**
* 清空当前数据库
*
* @return boolean
*/
public function flushDB ()
{
return $this->collection->flushDB();
}
/**
* 清空所有数据库
*
* @return boolean
*/
public function flushAll ()
{
return $this->collection->flushAll();
}
/**
* 发表内容到某一个通道
*/
public function publish ($channel, $key)
{
$ret = $this->collection->publish($channel, $key);
return $ret;
}
/**
* 设定一个key的活动时间单位(s)
*/
public function expire($key, $ttl)
{
$ret = $this->collection->expire($key, $ttl);
return $ret;
}
/**
* 返回名称为h的hash中元素个数
*
* @param string $key/存储键名
* @return int
*/
public function hlen ($key)
{
return $this->collection->hlen($key);
}
/**
* 给key重命名
*
* @param string $key/存储键名
* @return int
*/
public function rename ($oldkey, $key)
{
return $this->collection->rename($oldkey, $key);
}
/**
* 在子类中(注意注释中填写正确的返回值类型, 一般为类名):
* <code>
* public static function instance()
* {
* return parent::_instance(__CLASS__);
* }
* </code>
*
* @param string $model
* @throws Zeed_Exception
* @return Zeed_Db_Model_Redis
*/
protected static function _instance ($model)
{
if (isset(self::$instanceInternalCache[$model]) &&
is_subclass_of(self::$instanceInternalCache[$model], __CLASS__)) {
return self::$instanceInternalCache[$model];
} elseif (class_exists($model)) {
self::$instanceInternalCache[$model] = new $model();
return self::$instanceInternalCache[$model];
}
throw new Zeed_Exception('Redis Model( ' . $model . ' ) not exists.');
}
}
// End ^ Native EOL ^ UTF-8