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