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