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