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