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
还可以带参数,部分参数功能和相关命令等同。
删
删
即删除命令,该命令按照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
较为复杂,下面针对该命令单独进行说明描述:
查
查
就是查询查询、查找等命令了,对于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指令:
总结
通过以上分析得知,Redis字符串的命令随着版本的迭代,会出现新的操作指令,也有的老命令被新命令替代。 并且这些命令,也没法直接按照增
,删
, 改
,查
。这样简单明了的进行直接划分,因为个别命令,查询的同时还可以更新数据,增加的同时也存在变更数据的能力。本文只是为了方便描述,才按此方式进行分离说明。但是在使用过程中,需要了解仔细,以防出错。
指令都是为实现特定的功能。不同的指令支持不同的功能。作为整体来说,Redis支持说明那些功能呢?
- 一次插入一个或者多个key-value
- 一次查询一个或者多个key-value
- 一次修改一个或者多个key-value的有效生存期;
- 一次获取一个key对应的值部分值或者更新一个key对应的部分值
- 一次获取一个key对应值的长度
- 不存在才插入、存在才更新
- 比较两个key 的相似程度:公共子序列等
命令列表
站在巨人身上
- [1] Redio官网
- [2] Redis.com.cn
- [3] Redis Source