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