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