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