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