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