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