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