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