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