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