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