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