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