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