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