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