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