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