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