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