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