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