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