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