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