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