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