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