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