PHP操作Redis常用技巧总结

Stella981
• 阅读 338

一、Redis连接与认证

1

2

3

4

//连接参数:ip、端口、连接超时时间,连接成功返回true,否则返回false

$ret = $redis ->connect( '127.0.0.1' , 6379, 30);

//密码认证:成功返回true,否则返回false

$ret = $redis ->auth( '123456' );

二、String操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

//设置键值:成功返回true,否则返回false

$redis ->set( 'mystr' , 'Welcome!' );

//获取键值:成功返回String类型键值,若key不存在或不是String类型则返回false

$ret = $redis ->get( 'mystr' );

//从某个key所存储的字符串的指定偏移量开始,替换为另一指定字符串,成功返回替换后新字符串的长度。

$ret = $redis ->setRange( 'mystr' , 7, ' to Beijing!' );

//获取存储在指定key中字符串的子字符串。

$ret = $redis ->getRange( 'mystr' , 0, 6);

//设置新值,返回旧值:若key不存在则设置值,返回false

$ret = $redis ->getSet( 'mystr' , 'hi man' );

//一次设置多个键值对:成功返回true。

$ret = $redis ->mset([ 'name' => 'jet' , 'age' => 18]);

//一次获取多个key的值:返回一个键值对数组,其中不存在的key值为false。

$ret = $redis ->mget([ 'name' , 'age' ]);

//设置指定key的值及其过期时间,单位:秒。

//参数:键名,过期时间,键值。成功返回true。

$ret = $redis ->setex( 'name' , 10, 'jetwu' );

//以毫秒为单位设置指定key的值和过期时间。成功返回true。

$ret = $redis ->psetex( 'name' , 10, 'jetwu' );

//key的值不存在时,才为其设置值。key不存在且设置成功返回true,否则返回false。

$ret = $redis ->setnx( 'name' , 'boby' );

//setnx命令的批量操作。只有在给定所有key都不存在的时候才能设置成功,只要其中一个key存在,所有key都无法设置成功。

$ret = $redis ->msetnx([ 'country' => 'China' , 'city' => 'Shenzhen' ]);

//获取指定key存储的字符串的长度,key不存在返回0,不为字符串返回false。

$ret = $redis -> strlen ( 'name' );

//将指定key存储的数字值增加1。若key不存在会先初始化为0再增加1,若key存储的不是整数值则返回false。成功返回key新值。

$ret = $redis ->incr( 'age' );

//给指定key存储的数字值增加指定增量值。

$ret = $redis ->incrBy( 'age' , 10);

//给指定key存储的数字值增加指定浮点数增量。

$ret = $redis ->incrByFloat( 'age' , 1.5);

//将指定key存储的数字值减一。

$ret = $redis ->decr( 'age' );

//将指定key存储的数字值减去指定减量值。

$ret = $redis ->decrBy( 'age' , 10);

//为指定key追加值到原值末尾,若key不存在则相对于set()函数。

$ret = $redis ->append( 'mystr' , 'haha' );

三、Hash操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

//为hash表中的字段赋值。成功返回1,失败返回0。若hash表不存在会先创建表再赋值,若字段已存在会覆盖旧值。

$ret = $redis ->hSet( 'user' , 'realname' , 'jetwu' );

//获取hash表中指定字段的值。若hash表不存在则返回false。

$ret = $redis ->hGet( 'user' , 'realname' );

//查看hash表的某个字段是否存在,存在返回true,否则返回false。

$ret = $redis ->hExists( 'user' , 'realname' );

//删除hash表的一个字段,不支持删除多个字段。成功返回1,否则返回0。

$ret = $redis ->hDel( 'user' , 'realname' );

//同时设置某个hash表的多个字段值。成功返回true。

$ret = $redis ->hMset( 'user' , [ 'name' => 'jet' , 'age' => 18]);

//同时获取某个hash表的多个字段值。其中不存在的字段值为false。

$ret = $redis ->hMget( 'user' , [ 'name' , 'age' ]);

//获取某个hash表所有的字段和值。

$ret = $redis ->hGetAll( 'user' );

//获取某个hash表所有字段名。hash表不存在时返回空数组,key不为hash表时返回false。

$ret = $redis ->hKeys( 'user' );

//获取某个hash表所有字段值。

$ret = $redis ->hVals( 'user' );

//为hash表中不存在的字段赋值。若hash表不存在则先创建,若字段已存在则不做任何操作。设置成功返回true,否则返回false。

$ret = $redis ->hSetNx( 'user' , 'realname' , 'jetwu' );

//获取某个hash表的字段数量。若hash表不存在返回0,若key不为hash表则返回false。

$ret = $redis ->hLen( 'user' );

//为hash表中的指定字段加上指定增量值,若增量值为负数则相当于减法操作。若hash表不存在则先创建,若字段不存在则先初始化值为0再进行操作,若字段值为字符串则返回false。设置成功返回字段新值。

$ret = $redis ->hIncrBy( 'user' , 'age' , 10);

//为hash表中的指定字段加上指定浮点数增量值。

$ret = $redis ->hIncrBy( 'user' , 'age' , 1.5);

四、List操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

//从list头部插入一个值。

$ret = $redis ->lPush( 'city' , 'guangzhou' );

//从list尾部插入一个值。

$ret = $redis ->rPush( 'city' , 'guangzhou' );

//获取列表指定区间中的元素。0表示列表第一个元素,-1表示最后一个元素,-2表示倒数第二个元素。

$ret = $redis ->lrange( 'city' , 0, -1); //查看队列所有元素

//将一个插入已存在的列表头部,列表不存在时操作无效。

$ret = $redis ->lPushx( 'city' , 'hangzhou' );

//将一个或多个值插入已存在的列表尾部,列表不存在时操作无效。

$ret = $redis ->rPushx( 'city' , 'hangzhou' );

//移除并返回列表的第一个元素,若key不存在或不是列表则返回false。

$ret = $redis ->lPop( 'city' );

//移除并返回列表的最后一个元素,若key不存在或不是列表则返回false。

$ret = $redis ->rPop( 'city' );

//移除并获取列表的第一个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

//参数:key,超时时间(单位:秒)

//返回值:[0=>key,1=>value],超时返回[]

$ret = $redis ->blPop( 'city' , 10);

//移除并获取列表的最后一个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

//参数:key,超时时间(单位:秒)

//返回值:[0=>key,1=>value],超时返回[]

$ret = $redis ->brPop( 'city' , 10);

//移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。若源列表没有元素则返回false。

$ret = $redis ->rpoplpush( 'city' , 'city2' );

//移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

//参数:源列表,目标列表,超时时间(单位:秒)

//超时返回false

$ret = $redis ->brpoplpush( 'city' , 'city2' , 10);

//返回列表长度。

$ret = $redis ->lLen( 'city' );

//通过索引获取列表中的元素。若索引超出列表范围则返回false。

$ret = $redis ->lindex( 'city' , 0);

//通过索引设置列表中元素的值。若是索引超出范围,或对一个空列表进行lset操作,则返回false。

$ret = $redis ->lSet( 'city' , 2, 'changsha' );

//在列表中指定元素前或后面插入元素。若指定元素不在列表中,或列表不存在时,不执行任何操作。

//参数:列表key,Redis::AFTER或Redis::BEFORE,基准元素,插入元素

//返回值:插入成功返回插入后列表元素个数,若基准元素不存在返回-1,若key不存在返回0,若key不是列表返回false。

$ret = $redis ->lInsert( 'city' , Redis::AFTER, 'changsha' , 'nanjing' );

//根据第三个参数count的值,移除列表中与参数value相等的元素。

//count > 0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为count。

//count < 0 : 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。

//count = 0 : 移除表中所有与value相等的值。

//返回实际删除元素个数

$ret = $redis ->lrem( 'city' , 'guangzhou' , -2);

//对一个列表进行修剪,只保留指定区间的元素,其他元素都删除。成功返回true。

$ret = $redis ->ltrim( 'city' , 1, 4);

五、Set操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

//将一个元素加入集合,已经存在集合中的元素则忽略。若集合不存在则先创建,若key不是集合类型则返回false,若元素已存在返回0,插入成功返回1。

$ret = $redis ->sAdd( 'myset' , 'hello' );

//返回集合中所有成员。

$ret = $redis ->sMembers( 'myset' );

//判断指定元素是否是指定集合的成员,是返回true,否则返回false。

$ret = $redis ->sismember( 'myset' , 'hello' );

//返回集合中元素的数量。

$ret = $redis ->scard( 'myset' );

//移除并返回集合中的一个随机元素。

$ret = $redis ->sPop( 'myset' );

//返回集合中的一个或多个随机成员元素,返回元素的数量和情况由函数的第二个参数count决定:

//如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同。

//如果count大于等于集合基数,那么返回整个集合。

//如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。

$ret = $redis ->sRandMember( 'myset' , 2);

//移除集合中指定的一个元素,忽略不存在的元素。删除成功返回1,否则返回0。

$ret = $redis ->srem( 'myset' , 'hello' );

//迭代集合中的元素。

//参数:key,迭代器变量,匹配模式,每次返回元素数量(默认为10个)

$ret = $redis ->sscan( 'myset' , $it , 'a*' , 5);

//将指定成员从一个源集合移动到一个目的集合。若源集合不存在或不包含指定元素则不做任何操作,返回false。

//参数:源集合,目标集合,移动元素

$ret = $redis ->sMove( 'myset' , 'myset2' , 'aaa' );

//返回所有给定集合之间的差集,不存在的集合视为空集。

$ret = $redis ->sDiff( 'myset' , 'myset2' , 'myset3' );

//将所有给定集合之间的差集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回差集元素个数。

//参数:第一个参数为目标集合,存储差集。

$ret = $redis ->sDiffStore( 'myset3' , 'myset' , 'myset2' );

//返回所有给定集合的交集,不存在的集合视为空集。

$ret = $redis ->sInter( 'myset' , 'myset2' , 'myset3' );

//将所有给定集合的交集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回交集元素个数。

//参数:第一个参数为目标集合,存储交集。

$ret = $redis ->sInterStore( 'myset4' , 'myset' , 'myset2' , 'myset3' );

//返回所有给定集合的并集,不存在的集合视为空集。

$ret = $redis ->sUnion( 'myset' , 'myset2' , 'myset3' );

//将所有给定集合的并集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回并集元素个数。

//参数:第一个参数为目标集合,存储并集。

$ret = $redis ->sUnionStore( 'myset4' , 'myset' , 'myset2' , 'myset3' );

六、Zset操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

//将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,则更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。

$ret = $redis ->zAdd( 'scores' , 98, 'English' , 90, 'physics' );

//返回有序集中指定区间内的成员。成员按分数值递增排序,分数值相同的则按字典序来排序。

//参数:第四个参数表示是否返回各个元素的分数值,默认为false。

$ret = $redis ->zRange( 'scores' , 0, -1, true); //查看Zset所有成员以及它们各自的分数值

//返回有序集中指定区间内的成员。成员按分数值递减排序,分数值相同的则按字典序的逆序来排序。

$ret = $redis ->zReverseRange( 'scores' , 0, -1, true);

//返回有序集中指定分数区间的成员列表,按分数值递增排序,分数值相同的则按字典序来排序。默认使用闭区间。

$ret = $redis ->zRangeByScore( 'scores' , 90, 100, [ 'withscores' =>true]);

//返回有序集中指定分数区间的成员列表,按分数值递减排序,分数值相同的则按字典序的逆序来排序。注意,区间表示的时候大值在前,小值在后,默认使用闭区间。

$ret = $redis ->zRevRangeByScore( 'scores' , 100, 90, [ 'withscores' =>true]);

//迭代有序集合中的元素。

//返回值:[元素名=>分数值,,..]

$ret = $redis ->zscan( 'scores' , $it , '' , 10);

//返回指定有序集的元素数量。

$ret = $redis ->zCard( 'scores' );

//返回有序集中指定分数区间的成员数量。

$ret = $redis ->zCount( 'scores' , 90, 100);

//返回有序集中指定成员的分数值。若成员不存在则返回false。

$ret = $redis ->zScore( 'scores' , 'math' );

//返回有序集中指定成员的排名,按分数值递增排序。分数值最小者排名为0。

$ret = $redis ->zRank( 'scores' , 'chemistry' );

//返回有序集中指定成员的排名,按分数值递减排序。分数值最大者排名为0。

$ret = $redis ->zRevRank( 'scores' , 'chemistry' );

//移除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数。

$ret = $redis ->zRem( 'scores' , 'chemistry' , 'English' );

//移除有序集中指定排名区间的所有成员。

$ret = $redis ->zRemRangeByRank( 'scores' , 0, 2);

//移除有序集中指定分数值区间的所有成员。

$ret = $redis ->zRemRangeByScore( 'scores' , 80, 90);

//对有序集中指定成员的分数值增加指定增量值。若为负数则做减法,若有序集不存在则先创建,若有序集中没有对应成员则先添加,最后再操作。

$ret = $redis ->zIncrBy( 'scores' , 2, 'Chinese' );

//计算给定一个或多个有序集的交集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis ->zinterstore( 'zset3' , 'zset2' , 'zset1' );

//计算给定一个或多个有序集的并集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis ->zunionstore( 'zset3' , 'zset2' , 'zset1' );

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
2个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。 language JavaScript "name": "vuecliversion2", "version": "1.0.0", "desc
刚刚好 刚刚好
2个月前
css问题
1、 在IOS中图片不显示(给图片加了圆角或者img没有父级) <div<img src""/</div div {width: 20px; height: 20px; borderradius: 20px; overflow: h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
kenx kenx
1年前
个人博客开发之blog-api项目统一结果集api封装
前言由于返回json api 格式接口,所以我们需要通过java bean封装一个统一数据返回格式,便于和前端约定交互, 状态码枚举ResultCodejavapackage cn.soboys.core.ret;import lombok.Getter;/ @author kenx @version 1.0 @date 2021/6/17 15:35
晴空闲云 晴空闲云
2个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。 盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
1个月前
快速入门|使用MemFire Cloud构建React Native应用程序
> MemFire Cloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置 1、virsh edit centos7 找到“memory”和“vcpu”标签,将 <name>centos7</name> <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
Stella981 Stella981
1年前
Redis指令文档
Redis指令文档 --------- **连接控制 **QUIT 关闭连接 AUTH (仅限启用时)简单的密码验证 **适合全体类型的命令** EXISTS key 判断一个键是否存在;存在返回 1;否则返回0; DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4 TYPE key 返回
Wesley13 Wesley13
1年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数`NOW()`相同的格式返回日期和时间? 我知道如何使用`date()`做到这一点,但是我问是否有一个仅用于此的函数。 例如,返回: 2009-12-01 00:00:00 * * * ### #1楼 使用此功能: function getDatetimeNow() {
helloworld_28799839 helloworld_28799839
2个月前
常用知识整理
# Javascript ## 判断对象是否为空 ```js Object.keys(myObject).length === 0 ``` ## 经常使用的三元运算 > 我们经常遇到处理表格列状态字段如 `status` 的时候可以用到 ``` vue