redis操作封装类

class Redis {

// 默认配置名称(使用load_config加载)

private $_default_config_path = ‘package/cache/redis‘;

// redis实例对象

private $_redis;

// redis服务器地址

private $_host = ‘‘;

// redis服务器端口

private $_port = 6379;

/**

* 构造函数

*

* @access public

* @param array $conf 配置文件集合, 包含参数:

*              string $host 服务器地址

*              string $port 服务器端口

* @return void

*/

public function __construct(array $conf=array()) {

$this -> set_conf($conf);

$this -> reconnect(true);

}

/**

* 设置redis配置

* 执行前,配置会被重置为[host=‘‘, port=‘6379‘]

*

* @access public

* @param array $conf 配置文件集合, 包含参数:

*              string $host 服务器地址

*              string $port 服务器端口

* @return void

*/

public function set_conf(array $conf=array()) {

if (empty($conf)) {

$conf = load_config($this -> _default_config_path);

if (!is_array($conf) or empty($conf)) {

to_log(MAIN_LOG_ERROR, ‘‘, __CLASS__ . ‘:‘ . __FUNCTION__ . ‘: 默认配置为空‘);

return;

}

}

$this -> _host = ‘‘;

$this -> _port = 6379;

isset($conf[‘host‘]) and $this -> _host = $conf[‘host‘];

isset($conf[‘port‘]) and $this -> _port = intval($conf[‘port‘]);

}

/**

* 重新连接redis

*

* @access public

* @param boolean $is_new 是否必须重新连接

* @return boolean

*/

public function reconnect($is_new=false) {

$ret = false;

if ($is_new) {

$ret = $this -> _connect();

return $ret;

}

$check = $this -> _is_connected();

if (!$check) {

$ret = $this -> _connect();

}

return $ret;

}

/**

* 设置缓存数据, 仅支持字符串

*

* @access public

* @param string $key 缓存变量名

* @param string $value 缓存变量值

* @param string $ttl 缓存生存时间,单位:秒

* @return boolean

*/

public function set($key, $value, $ttl=3600) {

$key = strval($key);

$value = strval($value);

$ttl = intval($ttl);

$ttl < 0 and $ttl = 0;

if ($key === ‘‘ or $value === ‘‘) {

return false;

}

try {

$result = $this -> _redis -> setex($key, $ttl, $value);

}catch (\RedisException $e) {

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result ? true : false;

}

/**

* 重新设置缓存变量的生存时间

*

* @access public

* @param string $key 缓存变量名

* @param string $ttl 缓存生存时间,单位:秒

* @return boolean

*/

public function expire($key, $ttl=3600) {

$key = strval($key);

$ttl = intval($ttl);

$ttl < 0 and $ttl = 0;

if ($key === ‘‘) {

return false;

}

try {

$result = $this -> _redis -> expire($key, $ttl);

}catch (\RedisException $e) {

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result ? true : false;

}

/**

* 获取缓存变量值

*

* @access public

* @param string $key 缓存变量名

* @return mixed 成功返回变量值,失败返回false

*/

public function get($key) {

$key = strval($key);

if ($key === ‘‘) {

return false;

}

try {

$result = $this -> _redis -> get($key);

}catch (\RedisException $e) {

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result;

}

/**

* 批量删除缓存变量

*

* @access public

* @param mixed $key [string|array] 当为string时,自动转换为array

* @return boolean

*/

public function delete($key) {

!is_array($key) and $key = array($key);

$tmp_arr = array();

foreach ($key as $val) {

$tmp_str = strval($val);

$tmp_str !== ‘‘ and $tmp_arr[$tmp_str] = 1;

}

$key = array_keys($tmp_arr);

try {

$ret = true;

foreach ($key as $val) {

$result = $this -> _redis -> delete($val);

!$result and $ret = false;

}

}catch(\RedisException $e) {

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $ret;

}

/**

* 清空redis中的所有数据

*

* @access public

* @return boolean

*/

public function clear() {

try {

$result = $this -> _redis -> flushAll();

}catch(\RedisException $e){

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result ? true : false;

}

/**

* 将缓存变量放入redis队列,仅支持字符串及整型

*

* @access public

* @param string $key 缓存变量名

* @param string $value 缓存变量值

* @param boolean $to_right 是否从右边入列

* @return boolean

*/

public function push($key, $value, $to_right=true) {

$key = strval($key);

$value = strval($value);

if ($key === ‘‘ or $value === ‘‘) {

return false;

}

$func = ‘rPush‘;

!$to_right and $func = ‘lPush‘;

try {

$result = $this -> _redis -> $func($key, $value);

}catch (\RedisException $e) {

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result ? true : false;

}

/**

* 缓存变量出列

*

* @access public

* @param string $key 缓存变量名

* @param boolean $from_left 是否从左边出列

* @return boolean 成功返回缓存变量值,失败返回false

*/

public function pop($key , $from_left=true) {

$key = strval($key);

if ($key === ‘‘) {

return false;

}

$func = ‘lPop‘;

!$from_left and $func = ‘rPop‘;

try {

$result = $this -> _redis -> $func($key);

}catch(\RedisException $e){

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result;

}

/**

* 缓存变量自增

*

* @access public

* @param string $key 缓存变量名

* @return boolean

*/

public function increase($key) {

$key = strval($key);

if ($key === ‘‘) {

return false;

}

try {

$result = $this -> _redis -> incr($key);

}catch(\RedisException $e){

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result ? true : false;

}

/**

* 缓存变量自减

*

* @access public

* @param string $key 缓存变量名

* @return boolean 成功返回TRUE,失败返回FALSE

*/

public function decrease($key) {

$key = strval($key);

if ($key === ‘‘) {

return false;

}

try {

$result = $this -> _redis -> decr($key);

}catch(\RedisException $e){

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result ? true : false;

}

/**

* 判断缓存变量是否已经存在

*

* @access public

* @param string $key 缓存变量名

* @return boolean 存在返回TRUE,否则返回FALSE

*/

public function exists($key) {

$key = strval($key);

if ($key === ‘‘) {

return false;

}

try {

$result = $this -> _redis -> exists($key);

}catch (\RedisException $e) {

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return $result ? true : false;

}

/**

* 返回redis源对象

*

* @access public

* @return object

*/

public function get_handler() {

return $this -> _redis;

}

// ---------私有实现---------------------------------------------

/**

* 检验并连接redis服务器

*

* @access private

* @return boolean

*/

private function _connect() {

if (!class_exists(‘\Redis‘, false)) {

to_log(MAIN_LOG_ERROR, ‘‘, ‘Redis类不存在,可能是没有安装php_redis扩展‘);

return false;

}

try {

$this -> _redis = new \Redis();

$this -> _redis -> connect($this -> _host, $this -> _port);

}catch(\RedisException $e){

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return true;

}

/**

* 判断是否已连接到服务器

*

* @access public

* @return boolean

*/

public function _is_connected() {

if(!is_object($this -> _redis)) return false;

try {

$this -> _redis -> ping();

}catch (\RedisException $e) {

to_log(MAIN_LOG_WARN, ‘‘, __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());

return false;

}

return true;

}

}

时间: 2024-11-09 03:05:12

redis操作封装类的相关文章

python笔记7:mysql、redis操作

模块安装: 数据操作用到的模块pymysql,需要通过pip install pymysql进行安装. redis操作用的模块是redis,需要通过pip install redis进行安装. 检验是否安装成功:进入到Python命令行模式,输入import pymysql. import redis ,无报错代表成功: mysql操作方法如下: 查询数据:fetchone.fetchmany(n).fetchall() import pymysql #建立mysql连接,ip.端口.用户名.密

redis 操作常用命令

首先看一下redis操作常用的命令: exists key 测试制定的key是否存在 del key1 key2 .... keyn   删除制定的key type key 查看key的类型 keys pattern  返回匹配制定模式的所有的key raname oldkey newkey  修改key的名称 dbsize  查看当前数据库的key的数量 exprie key  seconds   为key指定过期时间 ttl  key  查看key的过期时间 select db-index

redis 操作大全 PHP-redis中文文档

转自  : http://www.cnblogs.com/weafer/archive/2011/09/21/2184059.html phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/owlient/phpredis(支持redis 2.0.4) Redis::__construct构造函数$redis = new Redis(); connect,

使用python对redis操作

写在前面 首先声明,这是为了学习python对redis操作而写的一个小demo,包括了这几天网站找到的一些资料,综合总结出来一些东西,最后附上我写的一个用python操作redis的一个demo: 模块安装 python提供了一个模块redis-py来使我们很方便的操作redis数据库,安装该模块也很简单,直接使用pip安装就行,命令如下: pip install redis 安装完之后,使用import调用一下就能知道是否安装成功,在python界面下输入import redis,如果不报错

使用Spring Data Redis操作Redis(二)

上一篇讲述了Spring Date Redis操作Redis的大部分主题,本篇介绍Redis的订阅和发布功能在Spring应用中的使用. 1. Redis的Pub/Sub命令 Redis的订阅和发布服务有如下图6个命令,下面分别对每个命令做简单说明. publish: 向指定的channel(频道)发送message(消息) subscribe:订阅指定channel,可以一次订阅多个 psubscribe:订阅指定pattern(模式,具有频道名的模式匹配)的频道 unsubscribe:取消

使用Leopard Redis操作Redis

使用Leopard Redis操作Redis 学习如何在旧项目中使用Leopard Redis. 本指南将引导您完成使用Leopard Redis操作Redis. How to complete this guide 你可以从头开始并完成每一个步骤,或者您可以绕过你已经熟悉的基本设置步骤.无论哪种方式,你最终都可以得到可工作的代码. 1.配置maven依赖 在dao模块的pom.xml加入 <dependencies> [...] <dependency> <groupId&

设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个数的控制并节约系统资源.假设希望在系统中某个类的对象仅仅能存在一个.单例模式是最好的解决方式. 2 模式核心思想 1)某个类仅仅能有一个实例: 2)它必须自行创建这个实例: 3)它必须自行向整个系统提供这个实例. 3 模式架构图 4 项目应用 4.1 需求说明 CleverCode在实际的PHP项目

PHP连接Redis操作函数

phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/owlient/phpredis(支持redis 2.0.4) Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号timeout: float,链接时长 (

redis操作

字符串命令set name fsq 设置name的值为fsq,如果存在name会覆盖.setnx name fsq 不存在name则设置,如果存在不会覆盖setex haircolor 10 red 设置超时10秒,10秒后此健值对失效mset key1 fsq1 key2 fsq 设置多个msetnx key2 fsq2 key3 fsq3 不存在则设置,防止覆盖 setrange name 8 gmail.com 设置name的值,从第8个字符开始,逐个字符设置,如果后边的字符串比gmail