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