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