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