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