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