phpredis
安装php的redis扩展:
http://pecl.php.net/package/redis
也可以用PHP直接连redis:
http://www.cnblogs.com/kudosharry/articles/2534694.html
<?php
/*******************************************************************************
* Redis PHP Bindings - http://code.google.com/p/redis/
*
* Copyright 2009 Ludovico Magnocavallo
* Released under the same license as Redis.
*
* Version: 0.1
*
* $Revision$
* $Date$
*
******************************************************************************/ class Redis { var $server;
var $port;
var $_sock; function Redis($host, $port=6379) {
$this->host = $host;
$this->port = $port;
} function connect() {
if ($this->_sock)
return;
if ($sock = fsockopen($this->host, $this->port, $errno, $errstr)) {
$this->_sock = $sock;
return;
}
$msg = "Cannot open socket to {$this->host}:{$this->port}";
if ($errno || $errmsg)
$msg .= "," . ($errno ? " error $errno" : "") . ($errmsg ? " $errmsg" : "");
trigger_error("$msg.", E_USER_ERROR);
} function disconnect() {
if ($this->_sock)
@fclose($this->_sock);
$this->_sock = null;
} function &ping() {
$this->connect();
$this->_write("PING\r\n");
return $this->_simple_response();
} function &do_echo($s) {
$this->connect();
$this->_write("ECHO " . strlen($s) . "\r\n$s\r\n");
return $this->_get_value();
} function &set($name, $value, $preserve=false) {
$this->connect();
$this->_write(
($preserve ? 'SETNX' : 'SET') .
" $name " . strlen($value) . "\r\n$value\r\n"
);
return $preserve ? $this->_numeric_response() : $this->_simple_response();
} function &get($name) {
$this->connect();
$this->_write("GET $name\r\n");
return $this->_get_value();
} function &incr($name, $amount=1) {
$this->connect();
if ($amount == 1)
$this->_write("INCR $name\r\n");
else
$this->_write("INCRBY $name $amount\r\n");
return $this->_numeric_response();
} function &decr($name, $amount=1) {
$this->connect();
if ($amount == 1)
$this->_write("DECR $name\r\n");
else
$this->_write("DECRBY $name $amount\r\n");
return $this->_numeric_response();
} function &exists($name) {
$this->connect();
$this->_write("EXISTS $name\r\n");
return $this->_numeric_response();
} function &delete($name) {
$this->connect();
$this->_write("DEL $name\r\n");
return $this->_numeric_response();
} function &keys($pattern) {
$this->connect();
$this->_write("KEYS $pattern\r\n");
return explode(' ', $this->_get_value());
} function &randomkey() {
$this->connect();
$this->_write("RANDOMKEY\r\n");
$s =& trim($this->_read());
$this->_check_for_error($s);
return $s;
} function &rename($src, $dst, $preserve=False) {
$this->connect();
if ($preserve) {
$this->_write("RENAMENX $src $dst\r\n");
return $this->_numeric_response();
}
$this->_write("RENAME $src $dst\r\n");
return trim($this->_simple_response());
} function &push($name, $value, $tail=true) {
// default is to append the element to the list
$this->connect();
$this->_write(
($tail ? 'RPUSH' : 'LPUSH') .
" $name " . strlen($value) . "\r\n$value\r\n"
);
return $this->_simple_response();
} function <rim($name, $start, $end) {
$this->connect();
$this->_write("LTRIM $name $start $end\r\n");
return $this->_simple_response();
} function &lindex($name, $index) {
$this->connect();
$this->_write("LINDEX $name $index\r\n");
return $this->_get_value();
} function &pop($name, $tail=true) {
$this->connect();
$this->_write(
($tail ? 'RPOP' : 'LPOP') .
" $name\r\n"
);
return $this->_get_value();
} function &llen($name) {
$this->connect();
$this->_write("LLEN $name\r\n");
return $this->_numeric_response();
} function &lrange($name, $start, $end) {
$this->connect();
$this->_write("LRANGE $name $start $end\r\n");
return $this->_get_multi();
} function &sort($name, $query=false) {
$this->connect();
if ($query === false) {
$this->_write("SORT $name\r\n");
} else {
$this->_write("SORT $name $query\r\n");
}
return $this->_get_multi();
} function &lset($name, $value, $index) {
$this->connect();
$this->_write("LSET $name $index " . strlen($value) . "\r\n$value\r\n");
return $this->_simple_response();
} function &sadd($name, $value) {
$this->connect();
$this->_write("SADD $name " . strlen($value) . "\r\n$value\r\n");
return $this->_numeric_response();
} function &srem($name, $value) {
$this->connect();
$this->_write("SREM $name " . strlen($value) . "\r\n$value\r\n");
return $this->_numeric_response();
} function &sismember($name, $value) {
$this->connect();
$this->_write("SISMEMBER $name " . strlen($value) . "\r\n$value\r\n");
return $this->_numeric_response();
} function &sinter($sets) {
$this->connect();
$this->_write('SINTER ' . implode(' ', $sets) . "\r\n");
return $this->_get_multi();
} function &smembers($name) {
$this->connect();
$this->_write("SMEMBERS $name\r\n");
return $this->_get_multi();
} function &scard($name) {
$this->connect();
$this->_write("SCARD $name\r\n");
return $this->_numeric_response();
} function &select_db($name) {
$this->connect();
$this->_write("SELECT $name\r\n");
return $this->_simple_response();
} function &move($name, $db) {
$this->connect();
$this->_write("MOVE $name $db\r\n");
return $this->_numeric_response();
} function &save($background=false) {
$this->connect();
$this->_write(($background ? "BGSAVE\r\n" : "SAVE\r\n"));
return $this->_simple_response();
} function &lastsave() {
$this->connect();
$this->_write("LASTSAVE\r\n");
return $this->_numeric_response();
} function &_write($s) {
while ($s) {
$i = fwrite($this->_sock, $s);
if ($i == 0)
break;
$s = substr($s, $i);
}
} function &_read($len=1024) {
if ($s = fgets($this->_sock))
return $s;
$this->disconnect();
trigger_error("Cannot read from socket.", E_USER_ERROR);
} function _check_for_error(&$s) {
if (!$s || $s[0] != '-')
return;
if (substr($s, 0, 4) == '-ERR')
trigger_error("Redis error: " . trim(substr($s, 4)), E_USER_ERROR);
trigger_error("Redis error: " . substr(trim($this->_read()), 5), E_USER_ERROR);
} function &_simple_response() {
$s =& trim($this->_read());
if ($s[0] == '+')
return substr($s, 1);
if ($err =& $this->_check_for_error($s))
return $err;
trigger_error("Cannot parse first line '$s' for a simple response", E_USER_ERROR);
} function &_numeric_response($allow_negative=True) {
$s =& trim($this->_read());
$i = (int)$s;
if ($i . '' == $s) {
if (!$allow_negative && $i < 0)
$this->_check_for_error($s);
return $i;
}
if ($s == 'nil')
return null;
trigger_error("Cannot parse '$s' as numeric response.");
} function &_get_value() {
$s =& trim($this->_read());
if ($s == 'nil')
return '';
else if ($s[0] == '-')
$this->_check_for_error($s);
$i = (int)$s;
if ($i . '' != $s)
trigger_error("Cannot parse '$s' as data length.");
$buffer = '';
while ($i > 0) {
$s = $this->_read();
$l = strlen($s);
$i -= $l;
if ($l > $i) // ending crlf
$s = rtrim($s);
$buffer .= $s;
}
if ($i == 0) // let's restore the trailing crlf
$buffer .= $this->_read();
return $buffer;
} function &_get_multi() {
$results = array();
$num =& $this->_numeric_response(false);
if ($num === false)
return $results;
while ($num) {
$results[] =& $this->_get_value();
$num -= 1;
}
return $results;
} } ?>
常见问题:
http://www.taocms.org/392.html
http://segmentfault.com/q/1010000000095030
phpredis的更多相关文章
- linux下安装Redis以及phpredis模块
一:redis的安装 1. 首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载 2. 通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压操作 3. ...
- Mac Pro 编译安装 Redis 的 PHP 客户端 phpredis
1.去官网下载 redis 扩展源码包 https://github.com/phpredis/phpredis 2.安装 redis 扩展 /usr/local/src/mac-sdk/source ...
- phpRedis安装、配置及简单使用
安装phpRedis前,请先安装Redis,再安装phpRedis插件. 1.下载安装 在linux服务器上,命令行执行以下命令(cd ./usr local/src 一般源码放在这里(推荐源码安装) ...
- phpredis中文文档 [转]
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...
- php-redis扩展安装
1 phpredis 在php中访问redis需要安装 https://github.com/phpredis/phpredis 基本上安装上面的readme既可以完成安装,需要注意的是在编译安装的时 ...
- PHP-redis中文文档
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/wi ...
- [Linux]安装phpredis扩展
1.下载phpredis,解压并进入目录,在目录下运行phpize /usr/local/php/bin/phpize ./configure --enable-redis-igbinary --wi ...
- 通过PHP扩展phpredis操作redis
我们使用phpredis,这个扩展能让你用PHP操作redis. 源码下载: phpize ./configure ); var_dump($result); echo $redis->get( ...
- 安装 phpredis 扩展
/************************************************//********************* phpredis ***************** ...
- mac 安装phpredis扩展
curl -O https://nodeload.github.com/nicolasff/phpredis/zip/master tar -zxf master cd phpredis-master ...
随机推荐
- Linux概念架构的理解
摘要 Linux kernel成功的两个原因:(1)架构设计支持大量的志愿开发者加入到开发过程中:(2)每个子系统,尤其是那些需要改进的,都支持很好的扩展性.正式这两个原因使得Linux kernel ...
- CentOS的Redis内存分配策略配置
安装了一主两从节点,启动之后发现有一个警告: 大概是说overcommit_memory设置成了0,在低内存环境下后台保存可能会失败,设置成1重启可解决. 然后,不太懂这个配置的含义,google一把 ...
- mongoDB中的连接池(转载)
一.mongoDB中的连接池 刚上手MongoDB,在做应用时,受以前使用关系型数据库的影响,会考虑数据库连接池的问题! 关系型数据库中,我们做连接池无非就是事先建立好N个连接(connection) ...
- nginx 去掉index.php
首先 要开启 rewrite功能 然后 在 vhosts.conf 中 server 下添加: if (!-f $request_filename) { rewrite (.*) /index.php ...
- 配置ModSecurity防火墙与OWASP规则
中文译文参考:http://netsecurity.51cto.com/art/201407/446264.htm 英文原文参考:http://resources.infosecinstitute.c ...
- C++/C#/java开发支持求解
本人大一学C语言,大二学VB,大三学VC,毕业后工作前两年用C++,接着两年用C#,最近几个月Android开发用Java. 以下本人总结以下,有些疑惑希望大师帮忙解答. 1. C语言,精简,灵活,适 ...
- ABAP程序相互调用--SUBMIT
(1) 调用其他程序: * Trigger the IDOC SUBMIT zpcppmd001_idoc AND RETURN. (2) 调用其他程序参数传递参数: *当被调用的程序的屏幕有输入参数 ...
- Linux vmstat具体解释(系统IO)
1. vmstat 能够展现给定时间间隔的server的状态值,包含server的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况 vmstat 2 10 2: 每隔2s 10 : 统计10次 ...
- UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)
Meta-Loopless Sorts Background Sorting holds an important place in computer science. Analyzing and ...
- matlab2013a for linux/Ubuntu 安装步骤及创建快捷方式(ubuntu14.04下安装)
1.挂载安装镜像:sudo mount -o loop myfile.iso /media/mnt #挂载ISO文件,使用參数 -o loop mnt为已经建立好的文件夹. 2.运行安装 ...