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