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