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