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