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