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