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