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