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