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