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