> 文档中心 > Redis7.0学习总结之:字符串命令详解

Redis7.0学习总结之:字符串命令详解


前言

总所周知Redis发展到目前为止,支持高达9种数据不同数据结构的NoSQL软件系统。伴随而来的是各种操作命令的不断增加。过百个命令,如何才能完全掌握,并且能比较系统化的记住,做到信手拈来,如果只是通过死记硬背估计难度比较,而且也不容易记住。故本系列文章,尝试通过分类汇总的方式,梳理各种命令。
本篇作为本系列的第一篇文章:主要是针对字符串String指令
Redis作为一个NOSQL服务f器,从本质上来说,它就是一个数据容器,那么它字符指令从根本上来说不外乎是:等四类操作。下面就按照这四个维度对命令进行汇总分类说明,文章稍后会列出各种命令的详细情况,作为附录参考。

[注] 本文所有的命令都是基于Redis7.0 rc版本进行描述。

顾名思义,就是往数据库里面增加数据的操作。
Redis针对字符串的增操作,分别提供了SET,SETEX,SETNX,MSET,MSETNX,PSETEX等六个命令。

下面首先通过表格的方式对这些命令进行汇总,然后针对命令做简要的说明,最后分别列出各种命令的详细情况描述:

命令字 功能概述 支持Redis版本 命令时间复杂度
SET 插入一个key-value键值对,成功返回OK,失败返回nil 1.0.0 O(1)
SETEX 插入一个带有效时间的key-value键值对,记录在单位时间内有效 >= 2.0.0 O(1)
SETNX 数据库中对应key值的数据不存在时,才插入;存在不进行任何操作 >= 1.0.0 O(1)
MSET 同时插入多个key-value键值对,总是返回OK,该命令不会返回失败 >= 1.0.0 O(1)
MSETNX 同时插入多个key-value键值对,但是前提是这些key都不存在,只要有一个存在,该命令都不做任何操作,成功返回OK,失败返回nil >= 1.0.1 O(1)
PSETEX 插入一个带有效时间的key-value键值对,类似SETEX,唯一区别是超时时间是毫秒为单位 >=2.6.0 O(1)

通过分析, 这些命令支持以下相关功能:

  • 覆盖式插入数据;SET
  • 不存在时插入和存在时才插入(即更新)SETNX
  • 带有效时间的数据插入SETEX,PSETEX
  • 数据即可以单条插入,也可以多条同时插入。MSET, MSETNX
  • SET还可以带参数,部分参数功能和相关命令等同。

SET参数详解

即删除命令,该命令按照Redis官网命令手册来看,并未分类到字符串命令一类,而是分到了Keys操作类命令。
命令名字是:DEL
语法格式如下:DEL key [key ...]。即支持单个key删除,也支持多个key同时删除操作。
命令返回具体删除的key数量。当key不存在时,会直接忽略。
该命令从1.0.0开始就存在,时间复杂度是O(N)。N是具体删除的key数量。

是为变更、更新。Redis的改命令比较特殊,即包含了正常理解范围内的字符串key-value对的变更更改,也包含了一些隐型数据增加删除变更。
下面分别针对这些命令,通过列表的方式描述说明:

字符指令:

命令字 功能概述 支持Redis版本 命令时间复杂度
APPEND 用于指定的key追加value。key不存在相当于set。 >= 2.0.0 O(1)
SETRANGE 从特定偏移开始设置新的value >= 2.2.0 O(1)

字符串的修改APPEND命令是往后不断增加内容,知道长度到达512M为止。而SETRANGE则是根据指定的偏移,设置新的value 。

加减指令:

命令字 功能概述 支持Redis版本 命令时间复杂度
DECR 针对key的值进行减1操作。值不存在,则初始化为0,再减 >= 1.0.0 O(1)
DECRBY 针对key的值进行减n操作。值不存在,则初始化为0,再减 >= 1.0.0 O(1)
INCR 针对key的值进行加1操作。值不存在,则初始化为0,再加 >= 1.0.0 O(1)
INCRBY 针对key的值进行加n操作。值不存在,则初始化为0,再加 >=1.0.0 O(1)
INCRYBYFLOAT 为键 key 中储存的值加上浮点数增量 increment ,key 中的浮点数是以字符串形式存储的。如果键 key 不存在, 先将键 key 的值设为 0 , 然后再执行加法操作 >= 2.6.0 O(1)

其中INCRYBYFLOAT较为复杂,下面针对该命令单独进行说明描述:

INCRYBYFLOAT

就是查询查询、查找等命令了,对于Redis的字符串来说,既可以单独查询一个key的值,也可以查询多个key,还可以针对特定key查询其子串。其中7.0开始增加一个LCS命令,用于查询两个key对应的公共子序列,该命令其实就是6.0的STRALGO命令。

普通字符串指令

命令字 功能概述 支持Redis版本 命令时间复杂度
GET 返回key的值 >= 1.0.0 O(1)
GETDEL 返回key的值,同时把键值对删除 <=6.2.0;6.2.0以后版本删除,通过SET+参数方式替代 O(1)
GETEX 返回key的值,并且同时修改key的有效时间 >=6.2.0 O(1)
GETRANGE 返回key对应值的指定范围内的子串 >= 2.4.0 O(1)
GETSET 返回key对应的旧值,同时设置新的值 >1.0.0,但是6.2.0以后删除,通过SET+参数方式替代 O(1)
MGET 一次返回多个key的值 >= 1.0.0 O(N)
STRLEN 返回key对应的值的长度 >=2.2.0 O(1)

7.0增加的LCS指令:

LCS_CMD

总结

通过以上分析得知,Redis字符串的命令随着版本的迭代,会出现新的操作指令,也有的老命令被新命令替代。 并且这些命令,也没法直接按照,, ,。这样简单明了的进行直接划分,因为个别命令,查询的同时还可以更新数据,增加的同时也存在变更数据的能力。本文只是为了方便描述,才按此方式进行分离说明。但是在使用过程中,需要了解仔细,以防出错。
指令都是为实现特定的功能。不同的指令支持不同的功能。作为整体来说,Redis支持说明那些功能呢?

  • 一次插入一个或者多个key-value
  • 一次查询一个或者多个key-value
  • 一次修改一个或者多个key-value的有效生存期;
  • 一次获取一个key对应的值部分值或者更新一个key对应的部分值
  • 一次获取一个key对应值的长度
  • 不存在才插入、存在才更新
  • 比较两个key 的相似程度:公共子序列等

命令列表

在这里插入图片描述

站在巨人身上

  • [1] Redio官网
  • [2] Redis.com.cn
  • [3] Redis Source