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