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