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