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