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