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