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