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