redis相关文档、手册、blog:
php-redis下载:https://github.com/phpredis/phpredis;github里也有phpredis的说明和redis的语法介绍
redis中文手册:http://redisdoc.com
php操作redis说明博客:作者:春哥也编程,http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html
1、安装redis
# wget http://download.redis.io/releases/redis-2.8.6.tar.gz # tar -zxvf redis-2.8.6.tar.gz # cd redis-2.8.6 # make # cd src && make all
如果安装出现以下错误:
make[1]: Entering directory `/root/xc/redis-2.6.14/src‘
LINK redis-server
zmalloc.o: In function `zmalloc_used_memory‘:
/root/xc/redis-2.6.14/src/zmalloc.c:223: undefined reference to `__sync_add_and_fetch_4‘
collect2: ld 返回 1
make[1]: *** [redis-server] 错误 1
make[1]: Leaving directory `/root/xc/redis-2.6.14/src‘
make: *** [all] 错误 2
则说明平台不兼容:则使用,如果没有出现那当然好了:
# make CFLAGS="-march=i686"
到此编译完成
#建立一个redis的工作目录
# mkdir -pv /usr/local/webserver/redis
redis的相关配置
# 进入到解压redis软件的src目录下,拷贝redis的命令至你的工作目录
# cd src/ # cp redis-cli redis-server redis-sentinel redis-benchmark redis-check-aof redis-check-dump /usr/local/webserver/redis/
#回到上一级目录,拷贝redis的配置文件redis.conf
# cd ../
# cp redis.conf /usr/local/webserver/redis/
# 启动redis服务 # vim redis.conf
daemonize yes ##开启后台运行
##添加到redis系统服务并配置开机启动
# cd utils/ # ./install_server.sh 其他的默认,这个填上redis-server的路径: Please select the redis executable path [] /usr/local/webserver/redis/redis-server 出现这个说明成功:Installation successful! # cd /etc/init.d/ # mv redis_6379 redis
这样就可以用这样的方式启动reids了,而不用进入到工作目录./redis-server redis.conf了
只需,service redis start|restart|stop)就可启动redis了
但还差一步,清空redis脚本的内容,把下面这个脚本写入,之后就可以用service redis start启动redis了
# vim redis
#!/bin/sh #chkconfig: 345 86 14 #description: Startup and shutdown script for Redis PROGDIR=/usr/local/webserver/redis ##这个是你redis工作目录的路径 PROGNAME=redis-server DAEMON=$PROGDIR/$PROGNAME CONFIG=/usr/local/webserver/redis/redis.conf PIDFILE=/var/run/redis.pid DESC="redis daemon" SCRIPTNAME=/etc/rc.d/init.d/redisd start() { if test -x $DAEMON then echo -e "Starting $DESC: $PROGNAME" if $DAEMON $CONFIG then echo -e "OK" else echo -e "failed" fi else echo -e "Couldn‘t find Redis Server ($DAEMON)" fi } stop() { if test -e $PIDFILE then echo -e "Stopping $DESC: $PROGNAME" if kill `cat $PIDFILE` then echo -e "OK" else echo -e "failed" fi else echo -e "No Redis Server ($DAEMON) running" fi } restart() { echo -e "Restarting $DESC: $PROGNAME" stop start } list() { ps aux | grep $PROGNAME } case $1 in start) start ;; stop) stop ;; restart) restart ;; list) list ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|list}" >&2 exit 1 ;; esac exit 0
启动redis:service redis start
2、安装httpd
# yum -y install httpd
3、安装php
# yum -y install php
4、安装php-devel
# yum -y install php-devel
5、安装php-redis
#安装前,安装phpsize,phpsize是php的程序,在你php的安装目录的bin目录下,执行即可
# phpsize
# ./configure [--enable-redis-igbinary]
# make && make install
---安装完成----
Build complete.
Don‘t forget to run ‘make test‘.
Installing shared extensions: /usr/lib64/php/modules/
---------------
添加redis模块:vim php.ini
extension=redis.so
重启apache服务器
service httpd restart
测试:cd /var/www/html
vim redis.php
<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1‘,6379);
$redis->set(‘site‘,‘xcroom‘);
echo ‘name is:‘ . $redis->get(‘site‘),‘<br />‘;
echo ‘xcroom‘;
?>
打开浏览器:
------------
name is:xcroom
xcroom
------------
测试成功
php操作redis的相关函数:
1、实例化redis类
$redis = new Redis();
2、open,connect
host: string. can be a host, or the path to a unix domain socket(主机)
port: int, optional(端口)
timeout: float, value in seconds (optional, default is 0 meaning unlimited)(连接超时断开的时间)
实例:
$redis->connect(‘127.0.0.1‘, 6379);
$redis->connect(‘127.0.0.1‘); // port 6379 by default
$redis->connect(‘127.0.0.1‘, 6379, 2.5); // 2.5 sec timeout.
$redis->connect(‘/tmp/redis.sock‘); // unix domain socket.
$redis->connect(‘127.0.0.1‘, 6379, 1, NULL, 100); // 1 sec timeout, 100ms delay between reconnection attempts.
3、pconnect, popen,长连接
4、auth
$redis->auth(‘foobared‘);
5、select,切换数据库
$redis->select(0); // switch to DB 0
6、close
7、setOption 设置redis模式 ,Set client option.
8、getOption 查看redis设置的模式
9、ping #Check the current connection status
<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1‘);
$va = array(‘val1‘=>‘hello‘,‘val2‘=>‘xcroom‘);
$redis->mset($va);
$v = array(‘val1‘,‘val2‘);
var_dump($redis->mget($v));
10、事务,multi进入事务状态,exec提交
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set pname jiangxi
QUEUED
127.0.0.1:6379> set pcity nancheng
QUEUED
127.0.0.1:6379> get pname
QUEUED
127.0.0.1:6379> get pcity
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) "jiangxi"
4) "nancheng"
php操作事务:
<?php
$redis = new Redis();
if($redis->connect(‘127.0.0.1‘)){
echo ‘connect successfully‘,‘<br />‘;
}
echo ‘a‘;
$ret = $redis->multi()
->set(‘a‘,‘aaaa‘)
->set(‘b‘,‘bbbb‘)
->get(‘a‘)
->get(‘b‘)
->exec();
var_dump($ret);
~ ?>
结果:
connect successfully
array(4) {
[0]=>
bool(true)
[1]=>
bool(true)
[2]=>
string(4) "aaaa"
[3]=>
string(4) "bbbb"
}
11、watch, unwatch 监测一个key的值是否被其它的程序更改。
<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1‘,6379);
$redis->watch(‘x‘);
$arr = array(‘val‘,‘keys‘);
$redis->watch($arr);
$ret = $redis->multi()
->incr(x)
->exec();
var_dump($ret);
?>
12、publish * 发表内容到某一个通道。注意,该方法可能在未来里发生改变(发布)
publish chanel2 "hello" 发布一个内容
subscribe * 方法回调。注意,该方法可能在未来里发生改变 (订阅)
subscribe chanel2
13、incr, incrBy key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
例子:
<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1‘);
$redis->set(‘a‘,18);
$a = $redis->get(‘a‘);
echo $a,‘<br />‘;
echo $redis->incrby($a,10); #每刷新一次值自增一
13、sdiff、sdiffstore,求差集
127.0.0.1:6379> sdiff key1 key2
1) "a"
2) "d"
127.0.0.1:6379> sdiffstore key1 key2
(integer) 2
127.0.0.1:6379> smembers key1
1) "b"
2) "c"
127.0.0.1:6379> smembers key2
1) "b"
2) "c"
14、sinter、sinterstore,求交集
127.0.0.1:6379> smembers key1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> smembers key2
1) "b"
2) "c"
127.0.0.1:6379> sinter key1 key2
1) "b"
2) "c"
15、sunion,sunionstore,求并集
127.0.0.1:6379> smembers key1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> smembers key2
1) "b"
2) "c"
127.0.0.1:6379> sinter key1 key2
1) "a"
2) "b"
3) "c"
16、sMembers, sGetMembers 返回名称为key的set的所有元素
17、zAdd(key, score,member):向名称为key的zset中添加元素member,score用亍排序。如果该元素已经存在,
则根据score更新该元素的顺序。
zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中
的index从start到end的所有元素
<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1‘);
echo ‘a‘;
$redis->zadd(‘love‘,1,‘a‘);
$redis->zadd(‘love‘,4,‘b‘);
$redis->zadd(‘love‘,3,‘c‘);
var_dump($redis->zrange(‘love‘,0,-1));
18、zcount:
$redis->zCount(key, star, end);
返回名称为key的zset中score >= star且score <= end的所有元素的个数,score为用于排序的数字
echo $redis->zcount(‘love‘,1,4);
19、zrank、zrevrank
$redis->zadd(‘love‘,1,‘a‘);
$redis->zadd(‘love‘,4,‘b‘);
$redis->zadd(‘love‘,3,‘c‘);
echo $redis->zrank(‘love‘,‘c‘);
echo $redis->zrevrank(‘love‘,‘b‘);
返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序 zIncrBy $redis->
redis 操作相关
flushDB 清空当前数据库
flushAll 清空所有数据库
randomKey 随机返回key空间的一个key
$key = $redis->randomKey();
select 选择一个数据库
move 转移一个key到另外一个数据库
$redis->select(0); // switch to DB 0
$redis->set(‘x‘, ‘42‘); // write 42 to x
$redis->move(‘x‘, 1); // move to DB 1
$redis->select(1); // switch to DB 1
rename, renameKey 给key重命名
renameNx 不remane类似,但是,如果重新命名的名字已经存在,不会替换成功
setTimeout, expire 设定一个key的活劢时间(s)
$redis->setTimeout(‘x‘, 3);
expireAt key存活到一个unix时间戳时间
$redis->expireAt(‘x‘, time() + 3);
dbSize 查看现在数据库有多少key
$count = $redis->dbSize();
auth 密码认证
$redis->auth(‘foobared‘);
bgrewriteaof 使用aof来进行数据库持久化
$redis->bgrewriteaof();
slaveof 选择从服务器
$redis->slaveof(‘10.0.1.7‘, 6379);
save 将数据同步保存到磁盘
bgsave 将数据异步保存到磁盘
lastSave 返回上次成功将数据保存到磁盘的Unix时戳
info 返回redis的版本信息等详情
type 返回key的类型值
string: Redis::REDIS_STRING
set: Redis::REDIS_SET
list: Redis::REDIS_LIST
zset: Redis::REDIS_ZSET
hash: Redis::REDIS_HASH
other: Redis::REDIS_NOT_FOUND