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