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