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