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