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