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