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