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