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