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