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