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