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