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