管理员
![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif)
论坛积分
分
威望 点
贡献值 个
金币 枚
|
- **php.ini文件添加:extension=php_redis.dll 重启php, phpinfo可以看到redis则证明安装成功**
复制代码 php连接redis测试- <?php
8 Q% g* C7 f& o" e+ O - $redis = new Redis(); / Z, R' d% ]2 p, B0 Q
- $redis->connect('127.0.0.1', 6379);//serverip port
; m5 C! K2 I3 y% c' O+ W, I0 b - $redis->auth('mypassword');//my redis password . o& o- Y; v( |# U( r
- $redis ->set( "test" , "Hello World");
) K9 x) i' e, H5 v% |) V - echo $redis ->get( "test");% {1 F6 V/ v9 d# C
复制代码 php操作redis函数封装- /**1 u0 m7 A9 C$ o5 V3 \! d
- * 如果不传入$host和$port默认读取Laravel环境变量的参数2 U7 ?3 g; c2 T2 q
- * redis Set/setex封装,可直接传入数组,可设置过期时间 written:yangxingyi
8 A3 s5 Z( ]. F8 A6 i" H* |* C6 y. d& v - */) M! |: ]! e+ V3 i, Z
- function RedisSet($key,$value,$expire=0,$host='',$port=''){
1 f( B# B& R5 p1 Q2 U - if(!$key||!$value) return false;. _6 ~/ w. v. T$ h" O3 X
- $host = $host?$host:getenv('REDIS_HOST');: }: d) ^5 k/ X) |$ r9 [5 h0 P1 E
- $port = $port?$port:getenv('REDIS_PORT');$ I( ~8 |% P6 g( ]. [
- $redis = new Redis();
2 z2 Y+ f @; ~) O3 i - $redis->connect($host, $port);, U. j$ O- x. F( x3 F# i) Z( C
- $value = is_array($value)?json_encode($value):$value;9 \5 H; U6 i8 I% ^: q: }9 ]/ L! \
- return $expire>0?$redis->setex(getenv('REDIS_PREFIX').$key, $expire,$value):$redis->set(getenv('REDIS_PREFIX').$key,$value);
: f5 ]2 w. \9 Q% q, C' ?1 y - }% h% Q F0 X1 o& ?) S
- /**
- T; Q3 ?8 p7 D+ [1 d - * redis get封装,如果传入的是数组,返回的也是数组,同理字符串 written:yangxingyi* y1 `5 a+ m$ }$ f' D& F7 c6 E9 D( {
- */
Y5 J7 J( |1 A* \! \ - function RedisGet($key,$host='',$port=''){
( t- {5 L1 h0 W( |' I; q' ~# H - $redis = new Redis();1 Q% E6 l) N* o7 I7 H: a
- $host = $host?$host:getenv('REDIS_HOST');
' U) ^; M: }3 o/ {% k4 a - $port = $port?$port:getenv('REDIS_PORT');
" @/ h; F* s5 V - $redis->connect($host, $port);& x; L4 M* b6 @* P1 E" {
- $result = $redis->get(getenv('REDIS_PREFIX').$key);& c/ I& s6 U% Q
- return is_null(json_decode($result))?$result:json_decode($result,true);) D) l2 X2 O. u4 g7 y2 r
- }
/ f3 ^) u4 J- }# K( K
复制代码 php操作redis大全,基本上php操作redis常用的函数都在下面了
& G# }5 _6 U0 T: y6 J- setex 带生存时间的写入值; k' A- I4 U# X6 O# C
- $redis->setex('key', 3600, 'value'); 0 S, Y& Y; g7 |% ?1 x
- setnx 判断是否重复的,写入值,如存在了不修改返回0,不存在就添加返回1! k! {: X7 G: e. p4 C* g/ ]
- $redis->setnx('key', 'value');9 D+ V# Y. {7 l5 Z* [
- 返回已经删除key
3 x! u4 {9 ^" } - $redis->delete('key1'); 成功返回1失败返回0
# m- q, w% _- Z" w9 ?5 e - $redis->delete('key1','key2'); 删除两个键成功返回1失败返回06 H4 U% l L" \7 P% \
- 查询生存时间
9 T+ l+ m; ]& M) ^# W% g! Z, V - $redis->ttl('key1'); 持久化的返回-1,有生存时间的返回时间(单位秒) C' G: [; q3 C7 P' M) A
- 同时给多个key赋值,同时设置key0和key1: O3 B% A" A A6 j
- $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
. `4 o0 j6 X* P+ P6 I2 k - key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
# ^: _5 Z. t6 R; j! d' H - $redis->incr('key1');
6 q) u3 M9 g+ \( u( U, I& S' I$ _ - $redis->incrBy('key1', 10);
! ?" e& o2 i: V% C6 o8 E+ m+ M - 减法跟加法一样! P- }: S7 E. m _8 }" r9 y
- $redis->decr("key1"); 减少1! g: z- r$ G+ @ x" k% A" ~
- $redis->decrBy("key1",5) 减少5
6 z# ?; k; |9 a* a! X - 8 O) i9 n) u; m2 l) \
- list相关操作,连表操作! K. M0 R) K! A3 j7 G( o" T
- lPush. ?4 |: K2 q& K) C7 M& |
- $redis->lPush("list", "888");
8 m; T7 j0 S0 ^$ T7 D; W2 T - $id = $redis->lpush('list','HHHHHHH');echo $id;返回链表的元素个数- I2 ~+ I* `- p' k
- $redi->lrange('list',0,-1); 返回全部数据,数组形式& ^9 m: K& R3 `
- $redis->lrange('list',0.2); 返回连表0-2坐标的三个元素% v5 g0 f5 y" c3 n# k( w
- lPushx/rPushx
( Z, ~+ A# N% ?3 t* q v. ^9 D4 D# H - $redis->lPushx(key, value);/ Q0 n1 E1 o' I
- 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加! N m: q, g( ^) l6 I
- - j2 f! ~0 o% J- T6 ?
- $redis->lpop('list');输出链表最左边的ksy的值,输出后删除掉这个key6 V$ l& x5 ~4 Q/ ]! y+ ]
- $redis->rpop('list');输出链表最右边的ksy的值,输出后删除掉这个key
/ l0 ?4 W U1 i& X2 n - $redis->lset('list',7,"update"); 修改坐标为7的值,成功返回1
# n) c5 ?" j/ V* F; n - 集合:sadd,sadd是无序的集合,每次插入集合的时候都可能会弄乱里面集合的排序3 @, e8 t: ?7 _3 [3 ?" i
- sadd s1 zhangsan4 P; C9 Z$ _1 o* `! v
- sadd s1 lisi
7 P \+ @1 V# M$ v: u# ?$ \: A& g6 ^ - sadd s1 wangwu
; ?9 w5 H: T/ E) q: J - sadd t1 yangxingyi
6 U, @1 a; t- E# U - sadd t1 lilei8 k9 k& F: H$ C8 {1 n+ \- |5 G1 z! u
- sadd t1 zhangsan2 ?* J+ A/ h; ?, H& M, t
- smembers s1 s1的所有集合内容
; a2 \( g- y$ Z. s - sdiff s1 t1 s1有的,t1没有的,差集
" M4 s! w5 z% U$ [) P$ t - $redis->sinter('s1','t1');返回s1和t1两个集合都有的,数组形式
. z% o* G0 D* R- o - scard s1 返回s1集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的, A# f8 y3 A& W& f n% F
- spop抽奖场景,返回集合里面随机的数' i: g, s9 m' o9 b$ w V
- spop s1 默认返回1个,返回后就删除这个数,中奖了就不能再中了* c; y( ?. S5 ^! x* C- ?4 u
- $i = $redis->spop('s1');var_dump($i); 返回一个数,返回后删除这个数
L* G0 y/ ]6 a3 h# W - $i = $redis->spop('s1',2);var_dump($i);不能返回两个的,提示错误的; K- Q, K: f6 u6 W7 ~9 G
- 随机返回集合里面的一个元素,但不删除,重复中奖* l0 y" k/ x$ l- {! y( H! P
- $i = $redis->srandmember('s1');echo $i;( q5 }6 g2 a! U1 I* w) U7 A! D' s
- sismember s1 zhangsan 查询张三在不在集合里面,在1,不在false! |& p6 U* ^( @& g0 O; N D; a) U
- $i = $redis->sismember('s1','zhangsan2');echo $i;在1,不在false) r8 M! z. W' G
2 `1 I0 K1 x+ S6 e1 X- zadd key 2 value 有序集合- I# T# r4 Y3 L& p8 ]' c! _
- zadd y1 1 zhangsan;6 N4 A7 ?3 s N9 P& D+ o
- zadd y1 3 lisi;+ A7 G& P/ F8 q! ]" c. \# g3 }% h" |3 u6 l
- zadd y1 2 wangwu;1 P1 [5 V- B( ^* z; V. F; S
- zrange y1 0 -1; 排序就是,根据插入的时候的排序从小到达zhangsan,wangwu,lisi
7 A% L0 b3 x% W% V5 B4 ^ - $i = $redis->zrange('y1',0,-1);var_dump($i);& h0 i6 k8 w/ q; b) P$ i8 b- h3 z
- 返回数组,键值不是插入时候给的键,是从0开始的新键0 s: S. I5 Z( Y. I: x: D
- zrevrange y1 0 -1; 反转排序,插入的时候键值越高,排序越优先6 n# w/ M9 y( G4 q4 _
- zcard y1 ;获取有序集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的5 Q6 O) ^' Q9 O
- 无序就scard,有序就zcard,有z没有s" O' L7 G0 x* F' u; h. ?
- sInterStore V( O' X4 y) ?" X) f- ^/ I2 r
- 求交集并将交集保存到output的集合
2 z2 t2 H( a, L0 b7 d, S, |2 M - $redis->sInterStore('output', 'key1', 'key2', 'key3')
! g1 W- ~' F) \7 ?7 g -
" K' C K. A9 N+ R - Hash操作0 \6 i1 \& {0 T) X; u7 i% A) Z
- hSet. c% I9 D7 [2 j, S: h
- $redis->hSet('h', 'key1', 'hello');
6 \6 m! u9 n4 H; e$ G @. m- Q, O - 向名称为h的hash中添加元素key1—>hello5 N" e7 ~. d4 k* w0 M; d- ]
- 9 r6 K& ^' Z& q! n4 z- \" ?1 R+ K( [
- hGet
Y! }9 v! I1 ^" |" g6 h8 H, G - $redis->hGet('h', 'key1');8 a, V4 ~' L- f
- 返回名称为h的hash中key1对应的value(hello)) p2 U5 ^2 P0 e# z+ z! k
- ; i+ A) D* j. Q* v! y R5 i/ d& f
- hLen
* f+ u' u: P; T; ? y0 S+ Z" E - $redis->hLen('h');
4 s$ ~7 P1 G( o - 返回名称为h的hash中元素个数( V/ c1 e& W0 a' ~# Z9 B, L5 [& p
- " K! I6 ~1 N! {5 l( }0 }! y
- hDel1 O7 D% U' v6 u
- $redis->hDel('h', 'key1');2 T: \5 \1 N& \# `
- 删除名称为h的hash中键为key1的域% o* r2 X' n- j5 _
- 5 Q9 Y9 O* u% O! |0 A
- hKeys
9 K4 W- C! _) a: \5 o - $redis->hKeys('h');- R3 I3 X$ d1 J
- 返回名称为key的hash中所有键; b2 W' y! G; @. x) P( G' ~
9 V8 L' `! R1 G; @5 ^2 a" D- hVals: k2 z# Q |6 s2 r
- $redis->hVals('h') q1 T' G$ |+ |- d! o, D" c' w
- 返回名称为h的hash中所有键对应的value3 x2 m3 S+ Q8 p6 J: B2 }
- b9 O, s$ Z0 n: ~( ]2 y- hGetAll2 c. X' R& y/ M
- $redis->hGetAll('h');1 Y; a* g* j- R3 [" M/ q0 s) M- K
- 返回名称为h的hash中所有的键(field)及其对应的value2 b6 V3 I* Y* R
- & S& W& C O" \% _' }6 q3 I6 Y
- hExists
) m: o8 W5 |0 b8 T9 O4 A \# I, }# ~ - $redis->hExists('h', 'a');
9 A5 P/ E4 [- L - 名称为h的hash中是否存在键名字为a的域
3 D/ S9 F9 M5 s - + L, O6 [/ E0 Y7 J& `$ S& T
- hIncrBy
0 B! D& G; M6 n" C8 ]4 }3 n) o - $redis->hIncrBy('h', 'x', 2);* k* p0 E9 ?. s7 J& u
- 将名称为h的hash中x的value增加2, y% L/ y4 W7 ^
- 8 x5 _. `" s, ]9 R" `4 s7 R2 Z, G
- hMset" Y& M' V1 ~) e' H) m9 Z# ~9 e/ |
- $redis->hMset('user:1', array('name' => 'Joe', 'salary' => 2000));
; G0 B9 i. p* }7 A b& t5 J4 s - 向名称为key的hash中批量添加元素# T" q+ Y( N/ L1 ~- p
- 2 X) i9 _* J6 m# S! }( ^% j0 N
- hMGet! A. M) r" X% O; T- G/ T; N
- $redis->hmGet('h', array('field1', 'field2'));* p) k0 Q. l/ M, r" V% y
- 返回名称为h的hash中field1,field2对应的value/ v, F9 X1 [# h. r
- * D$ Y6 r6 P+ I5 k7 }. B
- redis 操作相关
# f( G" N( e/ i) g - flushDB* C A* d5 f& o/ P0 r
- 清空当前数据库# ?: U Y$ w* l' G& B$ I
* K+ } [! v/ \- flushAll
2 B) k7 @( g' @! K% k/ W* u2 C$ F( \ - 清空所有数据库
$ b2 B8 ?7 T7 @& }* D5 I; g4 F& B, b8 W - 9 D' O3 X) Z9 ?
- randomKey" }. I2 W; F* l S- r
- 随机返回key空间的一个key
- [2 u+ Z' y( O) b# a9 T, z# x. P7 t - $key = $redis->randomKey();
; b8 x5 `" g' e. l# `1 ^ - 1 Q' z8 M+ E0 [6 I7 S
- select
) H) U$ g4 f9 U5 r' z - 选择一个数据库8 d3 ^( N$ o' W7 b# Z: ~
- move
: J5 i' {. ? ^ V - 转移一个key到另外一个数据库+ Q1 R8 y* |; h& W8 W3 R0 j9 e
- $redis->select(0); // switch to DB 0* F; h7 _6 D" R2 m3 U, i' `
- $redis->set('x', '42'); // write 42 to x' [2 M) [+ V* Z: n5 n! ]$ B
- $redis->move('x', 1); // move to DB 1
: ~3 S6 Z+ G4 w% _) V# u - $redis->select(1); // switch to DB 1* d: U; z9 J# c( P9 J% Y. L$ U
- $redis->get('x'); // will return 42
6 k8 ~! v! p: i! m$ M$ c* i+ a
8 Y( M: k4 m# X+ O$ b+ y6 j- rename, renameKey( c' { _/ d x" m
- 给key重命名% V1 @1 u# z1 x) }% |- p
- $redis->set('x', '42');
" L% K3 d8 g. b+ q+ H j& u - $redis->rename('x', 'y');0 m9 w5 o" n1 q( Y
- $redis->get('y'); // → 42 H- |. A8 y# d# n/ ?! a" i0 ?
- $redis->get('x'); // → `FALSE`5 p6 w8 R% d s4 ?, `+ Y' g
- 1 e$ p8 j, z. Q+ T! e4 i
- renameNx
* {( i. R, V9 {9 ^ - 与remane类似,但是,如果重新命名的名字已经存在,不会替换成功
- P1 g+ R- S+ n - ) K9 L. m4 w) v1 N
- setTimeout, expire2 q; ?& [1 o: T% p7 c: A
- 设定一个key的活动时间(s)
2 u4 V, @/ @* P2 n - $redis->setTimeout('x', 3);
7 a+ v+ t7 }; Z) W) u9 M - % F2 P8 t" r5 K0 E
- expireAt" v- ]2 w! E/ D7 ]
- key存活到一个unix时间戳时间
4 i) c' ]+ Z. ~9 ~. ?( ~ - $redis->expireAt('x', time() + 3);8 P5 F% C0 }& ~2 H/ g# g3 _. B
- 3 ]3 a& {2 j+ E. ~8 G
- keys, getKeys
6 e6 V- W7 X5 F( ?0 C - 返回满足给定pattern的所有key
, J2 z) K+ } h3 D' |. A, L6 f, L - $keyWithUserPrefix = $redis->keys('user*');; U1 {, R3 E. F6 h/ ~: f2 h" u+ `
- 7 s- C) k+ L( W! J- _7 C" P
- dbSize, k/ u2 t% F& I% I v
- 查看现在数据库有多少key+ Z' a/ U f5 K. e% ^
- $count = $redis->dbSize();! ], Z# h2 h( D% A
. e0 k; u7 x) X- auth
2 U9 @* W9 z0 ] - 密码认证" j; D4 ] u, E. {, p' g: g( n x" s; B
- $redis->auth('foobared');. U$ ` v( Q/ }0 g6 W+ o5 U
- ! ?: W( P6 H' h9 C
- bgrewriteaof
! X; w+ l" k+ S" | - 使用aof来进行数据库持久化
9 B! l8 }) F# \1 U" M - $redis->bgrewriteaof();/ H6 G/ q0 w$ E2 O* E
- 4 E7 G0 `9 Q- o# k8 ]) A/ @
- slaveof
{2 ^) |1 f" h3 C- d; J" R0 @) ` - 选择从服务器! q* Z9 u* p0 M
- $redis->slaveof('10.0.1.7', 6379);$ J; u7 h ~. S! X
- 2 w4 U" X0 R# z) U& G/ \8 b
- save5 h+ f; f$ |- ?# u/ }+ H: A8 z0 x
- 将数据同步保存到磁盘
9 F `8 v/ Z }8 R3 N! E0 M
* ~$ @7 U2 z' a; m- bgsave
( K, d+ h1 B& \+ a, E# K- D - 将数据异步保存到磁盘
8 T! e, H8 A5 i( K
& F3 M: S4 [7 j( n- lastSave
+ H0 H9 [ r( k- h7 o3 z7 _ - 返回上次成功将数据保存到磁盘的Unix时戳
! d# G2 V# g' i6 T# F+ }( ]6 h
( a" u( S* i* X0 d7 j0 x6 v- info
7 M- A4 k* p# }8 a; L( M$ a - 返回redis的版本信息等详情
( U, _8 D% D, {' L1 V6 a4 N: g5 N
' r4 T `- S6 s( T7 q- Redis::__construct构造函数: h: t+ F O" |1 g
- $redis = new Redis();$ |" Y; n+ Z# V2 E0 b: i/ F# b- z
- # p$ p/ M/ N. Q6 w- p, V$ `
- connect, open 链接redis服务
, P- t; q% q! L/ V4 u q! e - 参数
) M0 B7 I3 P8 Y, j/ c- ~) T4 x9 q% W - host: string,服务地址
) X* g' v0 M( }- i2 n - port: int,端口号% a/ f5 z3 _9 I; X5 S5 _, }9 m0 b
- timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)
9 @: [: p* K1 O, h - 注: 在redis.conf中也有时间,默认为300
* e( w5 j$ \1 A - % L! i* q" H. ~
- pconnect, popen 不会主动关闭的链接. N |% V& H4 g* I
- 参考上面, \8 Z# l5 K" Z9 V: N* }
- z! A+ o* l V$ K- setOption 设置redis模式9 Z7 B9 w3 `7 x) o9 k4 Y
- / x4 @: p/ o( s q/ l
- getOption 查看redis设置的模式& I/ V. K- r& \2 }5 o$ w
- ' h) S( j V- t
- ping 查看连接状态
2 y; W$ k8 v0 ]/ y. U T+ ` - - a8 r8 e% U# k' k* Y- J
- get 得到某个key的值(string值)
3 {% O& A$ c& n3 X$ r5 H - 如果该key不存在,return false
5 F2 u% R$ W# t6 {2 Q+ |% ~: d' P
6 m6 j5 C1 ?" ]$ n2 e% H+ t0 Y/ ~- set 写入key 和 value(string值)
8 x6 r$ }3 ]- N - 如果写入成功,return ture
2 K. r2 z& L+ k. b - ( {. `8 K9 `8 U: K3 h$ [
- setex 带生存时间的写入值
; l" l* R# J' z, @( N* g0 n - $redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.$ C& W! _ Z5 G
6 I& Z/ _3 y; ?( Y( X- setnx 判断是否重复的,写入值
2 _. f# t8 B& ^$ g3 F# D/ B! E - $redis->setnx('key', 'value');
; m& D6 r$ J" F# `0 G$ K6 q' o& o - $redis->setnx('key', 'value');
) \' ~& m! \- T) v1 H! j3 v - & L) a4 x! ]: ~3 b$ @) P
- delete 删除指定key的值+ [$ p5 v4 h" \4 _( ^6 A; S' t
- 返回已经删除key的个数(长整数)
6 S* ~: X3 @7 a2 { - $redis->delete('key1', 'key2');! c+ A' i- V9 j8 [3 @. @
- $redis->delete(array('key3', 'key4', 'key5'));
/ \+ t$ s/ u' t
+ D* r* u. m- N2 l- ttl2 a6 R* `" e) @9 Q: w
- 得到一个key的生存时间/ V$ p: n/ w. r- H6 `8 f
- ( P! H8 G$ e; D/ X5 `' T5 z
- persist
2 i* J4 c8 h! I - 移除生存时间到期的key
: N4 x5 `3 z, ?$ u; Y4 l% G. P - 如果key到期 true 如果不到期 false
+ @9 g3 b' ^. O0 b4 P; Q
( z5 {' P% y T |4 o2 u& B/ B R- mset (redis版本1.1以上才可以用)! r$ K# O8 a* @3 O; r) _# ^4 X
- 同时给多个key赋值. I+ v9 H8 `, x8 W
- $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));4 \% Y& E" T- \* H$ T) H" Q5 m2 e" [" {. D
- , i, ~+ J' A- K- {$ S- |6 K
- 8 q3 y* r, }2 L
- - Z: Z! @/ c5 U" z8 ~. D* b
- multi, exec, discard+ Q& O6 S7 {+ q" ^
- 进入或者退出事务模式
& A6 O: n& _& |/ A i; ?$ l2 O - 参数可选Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI
7 m" v& o% o4 \& p' y - Redis::MULTI:将多个操作当成一个事务执行1 T" B0 J' ^ j4 \' d; \
- Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证, n/ n/ x8 r2 q! ~ C9 \2 E, G
- discard:删除一个事务
" }5 q/ C5 l- P. y' I: L* @ - 返回值
3 C% E$ D3 `! \2 N5 h - multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,只到exec()方法被调用。: [- n: t* c& W5 m
- % B R: r0 k& e1 d
- watch, unwatch (代码测试后,不能达到所说的效果). V& f0 D+ P, V0 l3 a2 u0 p# _
- 监测一个key的值是否被其它的程序更改。如果这个key在watch 和 exec (方法)间被修改,这个 MULTI/EXEC 事务的执行将失败(return false)
8 ^" ^6 W" F. S. _: h9 U$ [2 E - unwatch 取消被这个程序监测的所有key0 A5 v: P/ j( v
- 参数,一对key的列表
6 [& S) ]. w% }/ A - $redis->watch('x');' \0 R( q+ O/ d8 O0 J5 o4 \. t$ {
- 4 a6 S, Z7 Q3 ?5 a7 c4 }
- $ret = $redis->multi() ->incr('x') ->exec();1 P5 ?/ R; ^. k `$ |+ ?* x
* y* y) ?7 T2 [% {& B" k: {6 O
5 Q9 ~/ C8 R/ j$ B$ K- subscribe *, B, Y7 X( j. m( o' h- v& ?
- 方法回调。注意,该方法可能在未来里发生改变5 Y, h, h$ e y
- * l9 k. W, g8 a2 r( w3 \5 n
- publish *
) T3 h8 b. s$ j. {! Z) \6 { - 发表内容到某一个通道。注意,该方法可能在未来里发生改变
" ^6 n; N+ s& f - ' \$ u, H2 x2 u. p5 [# I6 _7 Q
- exists
; D4 b0 T& {1 E; K - 判断key是否存在。存在 true 不在 false
+ j, z' c @% Q( B9 n, W" C! f8 i
4 s& C0 ]8 }, I. S5 a- ^- incr, incrBy
1 E5 q4 N8 j B5 e# z/ R - key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
& r" c- e: ]; L( b8 h5 S5 n6 M - $redis->incr('key1');
. [3 a4 Z( j, u8 Q9 w) @8 s0 \/ f - $redis->incrBy('key1', 10);
+ \0 ~' c% V# Z
! T. m6 p. T: \9 t$ S7 ^- decr, decrBy( Q) ]6 _0 S: U2 |4 J P" ^
- 做减法,使用方法同incr: ?& c2 r# Y+ T& }6 a: z( B. ^
. J1 o% @, B; X B- K0 y- _- getMultiple: _! _5 Q/ `. \4 W! W
- 传参! s0 j* ]' n4 w# B/ Y. _
- 由key组成的数组" D/ J3 s4 B) Z& _. d1 n4 q9 V
- 返回参数- k8 f3 X% \8 {9 J8 H
- 如果key存在返回value,不存在返回false
" @% @8 x, E( ~0 D - $redis->set('key1', 'value1'); $redis->set('key2', 'value2'); $redis->set('key3', 'value3'); $redis->getMultiple(array('key1', 'key2', 'key3'));
/ N8 Z9 H4 F* }8 ^" N' i% R$ a, b T - $redis->lRem('key1', 'A', 2);+ e! c) V+ I. ]
- $redis->lRange('key1', 0, -1);* e' G8 H8 x7 ^: M0 S. F
- : ]6 k( y( R7 T0 |% @# V- Z
- list相关操作
2 b+ W G1 ]( {1 | - lPush# S9 v$ u: A, w1 h. C
- $redis->lPush(key, value);. ?: y" n; r$ V' B6 H
- 在名称为key的list左边(头)添加一个值为value的 元素
) q* { [6 a) T/ n5 u% W' T
# Z( A! x8 q+ ^& o! i3 ~- rPush
6 M0 D! V! Z. R+ P7 Z1 h - $redis->rPush(key, value);
% Q2 h1 ]2 w1 n0 g- b0 q8 z( T - 在名称为key的list右边(尾)添加一个值为value的 元素+ t: D6 `; ~, }
- 2 G& |- s- s" `" l
- lPushx/rPushx/ w% o3 z+ O |" X1 C9 G
- $redis->lPushx(key, value);0 u: f5 `3 X8 E( C" i, y4 P2 q
- 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加
$ {. N; I2 W2 t$ X' I5 A! v" Q
/ U+ R1 B# ]9 ~* V3 R: y% P- lPop/rPop
( I1 D3 |+ O3 y5 [' Z1 M( k - $redis->lPop('key');( R6 J6 L# ?: G* `2 K/ K
- 输出名称为key的list左(头)起/右(尾)起的第一个元素,删除该元素0 l) P8 E& X5 B' A8 _3 @
- / v, f. M: s" d
- blPop/brPop
0 b3 H! x8 R# z h3 j - $redis->blPop('key1', 'key2', 10);
?# n/ F1 n: N" f% U% A - lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作: W& \, N# A( y* J3 o' t
; A5 e$ I2 c! }9 [' [. ^- lSize$ G v- d) V* X: P- n, N
- $redis->lSize('key');0 g: W3 o- t8 L5 ^
- 返回名称为key的list有多少个元素
6 y. F( i& ]' e# @7 R4 T+ f/ b
( R; K. d% @9 E; l: N6 u- lIndex, lGet
" M6 X9 W) a: y+ j, P+ W - $redis->lGet('key', 0); d! Q4 m) e( }5 m! Q7 ]
- 返回名称为key的list中index位置的元素
0 @+ ]: X+ f M: z0 L/ N - 6 R7 x( R+ c# a: b
- lSet
% N+ j# c. m- ^* J5 Y E$ x% o - $redis->lSet('key', 0, 'X');% m" g' Y6 |- X& w+ I: P+ k
- 给名称为key的list中index位置的元素赋值为value
, k2 q* _" x! w! T
; e- C; \) b4 B7 o% j* R( H- lRange, lGetRange# ` y( c' O2 d, }# C& k
- $redis->lRange('key1', 0, -1);
9 F% Y" d$ w$ D1 l: D) D6 U6 D - 返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)/ H) |% @2 V: G. Y7 ?5 \6 o5 T
* ?$ o5 |9 j6 G- lTrim, listTrim
9 P5 |+ }8 r+ K - $redis->lTrim('key', start, end);
( x6 E7 \+ a* M1 ] - 截取名称为key的list,保留start至end之间的元素3 }2 f f' ^% P: p3 e0 j
- ( [$ W2 p+ f6 _+ K9 j
- lRem, lRemove
+ x# d6 j$ Y0 v0 ]+ _% o - $redis->lRem('key', 'A', 2);0 E$ k' F3 k( D5 m
- 删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素
3 k- M& x; \" e) X8 Y* n - 6 _# x8 s/ l. y$ G" y
- lInsert
/ U$ m8 z6 t7 V3 d - 在名称为为key的list中,找到值为pivot 的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定,newvalue 是放在 pivot 的前面,或者后面。如果key不存在,不会插入,如果 pivot不存在,return -10 y8 g5 ?% F, x1 z, F% T/ l8 Y
- $redis->delete('key1'); $redis->lInsert('key1', Redis::AFTER, 'A', 'X'); $redis->lPush('key1', 'A'); $redis->lPush('key1', 'B'); $redis->lPush('key1', 'C'); $redis->lInsert('key1', Redis::BEFORE, 'C', 'X');
, l5 U' i% Y) P, J- d - $redis->lRange('key1', 0, -1);8 }* _* g) d7 r# q
- $redis->lInsert('key1', Redis::AFTER, 'C', 'Y');
' G/ t) F$ Q0 H* `6 z$ q; @ - $redis->lRange('key1', 0, -1);7 I' R0 H: u: I* J' g
- $redis->lInsert('key1', Redis::AFTER, 'W', 'value');
& X& |$ B/ g; v! l, o$ j - - T# Y/ T0 y& m$ d% u* T0 R
- rpoplpush1 B. H+ d, b, t6 \
- 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
$ t; y6 e+ f4 P5 O2 M - $redis->delete('x', 'y');- e" e. h# {& J$ t
- $redis->lPush('x', 'abc'); $redis->lPush('x', 'def'); $redis->lPush('y', '123'); $redis->lPush('y', '456'); // move the last of x to the front of y. var_dump($redis->rpoplpush('x', 'y'));3 q7 V4 M1 f1 z$ Q: q. J
- var_dump($redis->lRange('x', 0, -1));
! ~6 m3 ]0 y c% Y& j - var_dump($redis->lRange('y', 0, -1)); / b$ O! }1 V! `- m$ k7 i0 N
# [* p- e7 ]: M1 d( k* W9 P- string(3) "abc"
) t, Y4 y8 {' F9 L2 V1 {8 | - array(1) { [0]=> string(3) "def" } 1 ^6 r0 f6 I' Q1 Q) u
- array(3) { [0]=> string(3) "abc" [1]=> string(3) "456" [2]=> string(3) "123" }' l7 j: C2 t: k+ S% }) K* N. ^
2 D" k* ]7 q. O3 T( a" N- SET操作相关
8 I& n# w/ k( x( D - sAdd
5 L g# Q) t. j" x s0 t8 x - 向名称为key的set中添加元素value,如果value存在,不写入,return false
, ~& [* q6 `) E8 x! I+ S - $redis->sAdd(key , value);
6 H/ A; h% F9 e2 y" j! @ - + P- k" w0 b0 j" X1 C1 s0 ~
- sRem, sRemove8 Z7 ^/ ?& ~* l" b
- 删除名称为key的set中的元素value
8 w% O3 F$ L2 u ?0 i. f% I - $redis->sAdd('key1' , 'set1');# K* x+ ?& ~; }) B7 ?+ z! E* \
- $redis->sAdd('key1' , 'set2');, Z* s/ K5 ]* {/ E
- $redis->sAdd('key1' , 'set3');
8 _2 M q6 z/ Q; P$ t# q1 v - $redis->sRem('key1', 'set2');3 ?! ~2 X& \( I- O4 @# V0 p6 s! K+ S
- 3 H. Q$ m* A9 a' m
- sMove
, W# v7 ^# f. S- z - 将value元素从名称为srckey的集合移到名称为dstkey的集合0 ?' P: n' b- \6 A+ _+ H
- $redis->sMove(seckey, dstkey, value);/ d8 d$ i0 ]8 ]! |2 R
- 7 w! | ?- X, V3 K$ K2 }
- sIsMember, sContains( F) Z$ b/ ]; Z/ c' n/ j) X+ V8 ]
- 名称为key的集合中查找是否有value元素,有ture 没有 false2 Y8 z: R) i- ^& L8 V e/ M& S* p- e
- $redis->sIsMember(key, value);
1 ^$ |- q! e7 e - 6 ?9 w6 @) t/ L2 o
- sCard, sSize$ ^, a. X# v) P
- 返回名称为key的set的元素个数
; u7 E% O6 J' W L
/ g" W1 Q0 O1 n: v4 L, W3 m- sPop) P2 Z9 L8 f' Z( C3 j
- 随机返回并删除名称为key的set中一个元素8 J' ^& D& ?% y( h4 S6 n- z& J; F7 g
- . i$ S$ s3 z$ S v6 U1 L$ Q
- sRandMember
6 n% |* a c$ o: w' E1 b - 随机返回名称为key的set中一个元素,不删除2 T H& y7 I& d" B5 U" s. M
' c# n$ c7 t3 Y- sInter' r/ d) S4 |( K d
- 求交集
6 k/ E# P8 y) ]$ c
% T6 W8 M2 L8 K. ^: q! G/ w- sInterStore
8 \2 Z# ?7 I' {4 \& l/ X7 l - 求交集并将交集保存到output的集合/ R7 Q6 D; ^6 s* V+ A: I
- $redis->sInterStore('output', 'key1', 'key2', 'key3')
( ~6 ~6 d8 C( p9 K0 `' c+ f - ( ]( r; b$ F) M0 b! P1 q% |: x
- sUnion O! M) b: d% F G& f
- 求并集0 h& j* U3 f/ e. L% R7 }1 I6 u
- $redis->sUnion('s0', 's1', 's2');
; m( i3 D5 t7 u9 Y - s0,s1,s2 同时求并集
* B( I5 ~, D) r0 z5 L9 P
1 m3 z$ N: _* W: @! k, V4 l. e- sUnionStore% {% r! t# z8 |! `) H
- 求并集并将并集保存到output的集合
. Z7 y. [9 q! L; a1 |. ^ - $redis->sUnionStore('output', 'key1', 'key2', 'key3');
+ y$ Q) `. @1 ~# S, d$ @
% }1 _+ i, t: L- sDiff$ H8 Q1 u/ B* H3 g9 M$ f& F6 `
- 求差集
9 n. M1 j0 Q# F! m! _) D - : ?" L {/ R }1 P- S! ^( W
- sDiffStore
% N: x% i- B9 y* _2 l( X m5 h* P - 求差集并将差集保存到output的集合- D p( ~) T. Q, f" {! H& L" }9 d
1 w* k2 k( i( Q; k- sMembers, sGetMembers
k3 ~( y1 A* Q' F) e9 m, } - 返回名称为key的set的所有元素9 ~$ ]. J; _9 U8 |3 I. R
- : O ?' I5 g5 P
- sort5 [3 ]$ R0 n U# W) X) N/ w
- 排序,分页等
/ y' v, |0 {, G" Z - 参数
$ n9 j2 d' t2 Y: X* k# F7 Q3 I - 'by' => 'some_pattern_*',
7 m; m' l$ Q. d; ]' L" x - 'limit' => array(0, 1),
. f) o _) k) Z& u" G( u - 'get' => 'some_other_pattern_*' or an array of patterns,
# G; V7 D3 U8 I - 'sort' => 'asc' or 'desc',
$ a0 y) @, H; l; | - 'alpha' => TRUE,
s' E( X( S% B - 'store' => 'external-key'1 S; W0 @ R# f, }( R4 |
- 例子/ ]3 \% D1 V* B I
- $redis->delete('s'); $redis->sadd('s', 5); $redis->sadd('s', 4); $redis->sadd('s', 2); $redis->sadd('s', 1); $redis->sadd('s', 3);
) t( r, G- H; I1 s2 x' q, G - var_dump($redis->sort('s')); // 1,2,3,4,5
6 p5 R, O+ q, F6 g - var_dump($redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1
2 V* ~4 z# b! ]8 q$ f) e8 M* n - var_dump($redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)5
) H: U# `/ k) A3 {7 ?' I - X( A% o" V' ^# l2 R4 J: y
- string命令
4 T% [* f. Y( O; x9 [9 S - getSet
6 C5 b* s8 u. O' c0 `7 H - 返回原来key中的值,并将value写入key: `; n( p$ c& H* ^% R) z
- $redis->set('x', '42');( D! D' K4 b; Y1 ~" H8 k3 b
- $exValue = $redis->getSet('x', 'lol'); // return '42', replaces x by 'lol'9 K, f! d4 C; C$ i
- $newValue = $redis->get('x')' // return 'lol'
* Y `1 w9 s8 e$ g+ n3 y
v$ |* U3 \, G3 Q3 H- t- append& w" |' D. R7 n" _3 @% F
- string,名称为key的string的值在后面加上value& W* B; S j, C9 y- f f
- $redis->set('key', 'value1');
( m1 Z3 M, T5 x: t$ Y - $redis->append('key', 'value2');- c8 b0 @: |5 r
- $redis->get('key');; D" V# s0 N1 x! ?
- + M! f. {' _. g; i! H- Z
- getRange (方法不存在)
2 [: u {! P4 J& I+ L% y/ m - 返回名称为key的string中start至end之间的字符
+ R$ o& N5 l& c' s$ M - $redis->set('key', 'string value');
4 L+ Q6 e7 W, e: C5 k8 X - $redis->getRange('key', 0, 5);+ V! }; } X Q. {) I+ ^0 e
- $redis->getRange('key', -5, -1);
; b% a, g K( r* C8 p% h( c
" a3 @- o1 F: I# c; S! U ]- setRange (方法不存在)
4 I; A! [$ I& f* ~7 [ - 改变key的string中start至end之间的字符为value0 x. W" S5 l& }9 y
- $redis->set('key', 'Hello world');( I4 [% h% S' B
- $redis->setRange('key', 6, "redis");
& c4 o4 c6 @5 V! D - $redis->get('key');& H# Y5 q! m/ ]3 @, C. M/ x
* h( \1 F: t( {6 {- strlen3 J4 I- C% ]* [( y4 ?5 c
- 得到key的string的长度/ \4 O" `; M* _/ K0 U
- $redis->strlen('key');
" [5 a, O( h3 ]; X$ W. L m - & ]+ |/ ~0 m# W" ]/ [# ~" F: o
- getBit/setBit( s6 _$ v1 c. M% ^
- 返回2进制信息
5 C3 `" s8 Z" W& p+ N! Q, k& b& f - 9 K3 w5 y i& j( o- [) V- e4 n1 k
- zset(sorted set)操作相关
3 l' n5 f! U. E - zAdd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。# C5 t4 A7 l) e2 I7 {, V. Z8 r
- $redis->zAdd('key', 1, 'val1');( b5 M% C! s! w8 P. x4 \
- $redis->zAdd('key', 0, 'val0');5 M) @% M( L. d% E3 y
- $redis->zAdd('key', 5, 'val5');
( v6 }6 J3 A) w" J0 q( G* U - $redis->zRange('key', 0, -1); // array(val0, val1, val5)
* e0 x/ \3 _' d- p - * J) u9 l$ o( [% ]; y
- zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
7 X( q& N1 {' m% E9 W4 h# u+ M. F3 o - $redis->zAdd('key1', 0, 'val0'); `3 o; @ x- m- a
- $redis->zAdd('key1', 2, 'val2');
5 g f4 |9 Q/ Q u t* |$ Q - $redis->zAdd('key1', 10, 'val10');, g6 O1 o b! u/ |
- $redis->zRange('key1', 0, -1); // with scores $redis->zRange('key1', 0, -1, true);
: A4 C" s0 l0 Y5 b - ! ]& ?+ o H2 k0 B. o
- zDelete, zRem% T' _8 S1 o0 f8 e' R3 g
- zRem(key, member) :删除名称为key的zset中的元素member
" \1 {) {' ?8 L9 t# s K - $redis->zAdd('key', 0, 'val0');/ T0 Y' Y M; t# ?2 ]; X( D5 ]
- $redis->zAdd('key', 2, 'val2'); h3 A, s) [% w1 D" s$ Q3 z
- $redis->zAdd('key', 10, 'val10');% E3 R7 k: W+ o8 |- U+ F
- $redis->zDelete('key', 'val2');8 w$ R H9 F9 H+ n+ @
- $redis->zRange('key', 0, -1);
4 u# f# m0 H1 V7 T. K - . z# C. m4 k: y
- zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出# z/ M% o M+ z9 z) T
- $redis->zAdd('key', 0, 'val0');
7 u" m1 `; I, { y: j# K - $redis->zAdd('key', 2, 'val2');
7 [! u+ [/ \$ h6 ?0 x E - $redis->zAdd('key', 10, 'val10');
5 `; O* S' ^6 e: D5 g( ~ - $redis->zRevRange('key', 0, -1); // with scores $redis->zRevRange('key', 0, -1, true);. v" X8 G: k6 m0 e* Q
- ) h6 L% c1 e/ b$ n. q
- zRangeByScore, zRevRangeByScore: Z. j, }( z' W0 z
- $redis->zRangeByScore(key, star, end, array(withscores, limit ));
# |1 G- N: v; b9 L - 返回名称为key的zset中score >= star且score <= end的所有元素+ `% g& X$ F; X" {* J
( @& ?( Q P2 l* p- zCount* e' X" k7 [7 [& g0 ~, Q
- $redis->zCount(key, star, end);$ D/ U$ l: Z# g3 U- Q) s
- 返回名称为key的zset中score >= star且score <= end的所有元素的个数8 u9 ]: U5 v2 W/ X
- " \( r6 X* z9 M' U/ O
- zRemRangeByScore, zDeleteRangeByScore
0 X9 Z# v, z# G z - $redis->zRemRangeByScore('key', star, end);. d6 C3 \* w; @# d4 R/ x
- 删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数
2 ^) r# d# F' S - * P7 y: G9 c/ O! ~: Y( O! ~
- zSize, zCard
* {% c' D l) D' e. I: d; Q( B - 返回名称为key的zset的所有元素的个数
1 w% D9 P: D, N7 X7 g1 h; ^ - 1 z% I" P; ?; @
- zScore
' A2 \* M/ |" j+ j4 Y! ^ - $redis->zScore(key, val2);; ~3 y3 k+ Y2 x1 c
- 返回名称为key的zset中元素val2的score$ R& U& D* t! v6 c8 M: G
- 0 o0 B0 z* j! y- \8 O
- zRank, zRevRank) \# P" a' }( G# _( j1 v. D. c, r
- $redis->zRevRank(key, val);, ?6 O6 t4 M& Q% F7 R% t8 i
- 返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序9 J8 `+ \( _! a, ~3 Y! V/ ]$ J" `3 ^
" g9 H$ l% A' a- zIncrBy
( K9 l3 Q5 ]* T: O( j' d - $redis->zIncrBy('key', increment, 'member');' ], {& ] C: D, e- M9 ~9 e
- 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment e" }8 l7 H5 o6 R& y4 c; J6 F
- ; q9 ^8 k7 f) d/ F- v0 e3 b
- zUnion/zInter
, W7 D$ A- k' {) ] - 参数
|& I8 W& e5 v& B6 z - keyOutput
9 ]6 |. B1 B" |1 i7 }" p3 U% W - arrayZSetKeys1 l/ L" n7 g. t' W7 c
- arrayWeights0 v! O9 ~9 V" r0 J' J
- aggregateFunction Either "SUM", "MIN", or "MAX": defines the behaviour to use on duplicate entries during the zUnion.
/ f' c5 o9 m8 a! e% {5 z+ ? - 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。
! r* z4 f4 B0 ~% B$ ^6 d
复制代码 0 C5 B p6 i: I( A
, C/ l# H6 r0 D1 q* R3 t2 ]& M
+ J0 L; t, N5 C1 g
3 S3 S. U! E Z: h0 L |
|