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