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