Redis常见数据类型(2)

目录

String字符串

常见命令

SET

GET

MGET

MSET

SETNX

计数命令 

INCR

INCRBY

DECR

DECRBY

INCRFLOAT

其它命令

 APPEND

GETRANGE

SETRANGE

STRLEN


String字符串

字符串是Redis最基础的数据类型, 关于字符串需要特别注意: (1)首先Redis中所有的键的类型都是字符串类型, 而且其它几种数据结构也是在字符串类型的基础上构建的, 例如列表和集合的元素都是字符串类型, 所以字符串类型能为其它4种数据结构的学习奠定基础. (2)其次, 如图, 字符串类型的值实际可以是字符串, 包含一般格式的字符串类似JSON, XML格式的字符串; 数字, 可以是整型或者浮点型; 甚至是二进制数据, 例如图片, 音频等. 不过一个字符串的最大值不能超过512MB.

由于Redis内部存储的字符串完全是按照二进制流的形式保存的,  所以Redis是不处理字符集编码问题的, 客户端传入的命令中使用的是什么字符集编码, 就存储什么字符集编码.

常见命令

SET

将string类型的value设置到key中. 如果key之前存在, 则覆盖, 无论原来的数据类型是什么. 之前关于此key的TTL也全部失效.

语法:

SET key value [expiration EX seconds | PX milliseconds] [NX|XX]

命令有效版本: 1.0.0之后.    时间复杂度:O(1) 

选项:

EX seconds: 使用秒为单位设置key的过期时间.

PX milliseconds: 使用毫秒为单位设置key的过期时间.

NX: 只在key不存在时才进行设置, 即如果key之前已经存在, 设置不执行.

XX: 旨在key存在时才进行设置, 即如果key之前不存在, 设置不执行.

注: 由于带选项的SET命令可以被SETNX, SETEX, PSETEX等命令代替, 所以之后版本中, Redis可能进行合并.

返回值:

如果设置成功, 则返回OK.

如果由于SET制定了NX或XX但条件不满足, SET不会执行, 并返回(nil).

示例:

GET

获取key对应的value. 如果key不存在, 返回nil. 如果value的数据类型不是string, 会报错.

语法:

GET key 

命令有效版本: 1.0.0之后.  时间复杂度: O(1).

返回值: key对应的value, 或者nil当key不存在. 

MGET

一次性获取多个key的值. 如果对应的key不存在或者对应的数据类型不是string, 返回nil.

语法:

MGET key [key...] 

命令有效版本: 1.0.0之后. 时间复杂度: O(N) N是key的数量.

返回值: 对应value的列表.

示例:

MSET

一次性设置多个key的值.

语法:

MSET key value [key value...] 

命令有效版本: 1.0.1之后.  时间复杂度: O(N) N是key的数量.

返回值: 永远是OK.

SETNX

设置key-value但只允许在key之前不存在的情况下.

语法:

SETEX key value

命令有效版本: 1.0.0之后 时间复杂度: O(1)

返回值: 1表示设置成功. 0表示没有设置.

示例:

计数命令 

INCR

将key对应的string表示的数字加一. 如果key不存在, 则视为key对应的value是0. 如果key对应的string不是一个整型或者范围超过了64位有符号整型, 则报错.

语法:

INCR key

命令有效版本: 1.0.0之后  时间复杂度:O(1)

返回值: integer类型的加完后的数值.

示例:

INCRBY

将key对应的string表示的数字加上对应的值.  如果key不存在, 则视为key对应的value是0. 如果key对应的string不是一个整型或者范围超过了64位有符号整型, 则报错.

语法:

INCRBY key decrement

命令有效版本: 1.0.0之后. 时间复杂度: O(1)

返回值: integer类型加完后的数值.

示例:

DECR

将key对应的string表示的数字-1. 如果key不存在, 则视为key对应的value是0. 如果key对应的string不是一个整型或者范围超过了64位有符号整型, 则报错.

语法:

DECR key 

命令有效版本: 1.0.0之后  时间复杂度: O(1)

返回值: integer类型减完后的值.

DECRBY

将key对应的string表示的数字减去对应的值. 如果key不存在, 则视为key对应的value是0. 如果key对应的string不是一个整型或者范围超过了64位有符号整型, 则报错.

语法:

DECRBY key decrement

命令有效版本: 1.0.0之后. 时间复杂度: O(1)

返回值: integer类型减完后的数值.

INCRFLOAT

将key对应的string表示的浮点数加上对应的值.  如果对应的值是负数, 则视为减去对应的值(因此没有DECRFLOAT). 如果key不存在, 则视为key对应的value是0. 如果key对应的不是string, 或者不是一个浮点数, 则报错. 允许采用科学计数法表示浮点数.

语法:

INCRBYFLOAT key increment

命令有效版本: 2.6.0之后   时间复杂度: O(1)

返回值: 加/减完后的数值.

示例:

很多存储系统和编程语言内部使用CAS机制实现计数功能, 会有一定的CPU开销, 但在Redis中完全不存在这个问题, 因为Redis是单线程架构, 任何命令到了Redis服务端都要顺序执行.

其它命令

 APPEND

如果key已经存在并且一个是string, 命令会将value追加到原有string的后面. 如果key不存在, 则效果等同于SET命令.

语法:

APPEND KEY VALUE

命令有效版本: 2.0.0之后.  时间复杂度:O(1). 追加的字符串长度比较短, 可以视为O(1).

返回值: 追加完成之后string的长度.

示例:

GETRANGE

返回key对应的string的字串, 由start和end确定(左闭右闭) . 可以使用负数表示倒数. -1代表倒数第一个字符, -2表示倒数第二个. 0是正数开始. 超过范围的偏移量会根据string的长度调整成正确的值.

语法:

GETRANGE key start end

命令有效版本: 2.4.0之后.  时间复杂度: O(N) N为[start,end]长度. 由于string通常较短, 可视为O(1)

返回值: string类型的字串.

SETRANGE

覆盖字符串的一部分, 从指定的偏移开始.

语法:

  SETRANGE key offset value 

命令有效版本: 2.2.0之后. 时间复杂度: O(N), N为value的长度. 由于value一般较短, 可视为O(1)

返回值: 替换后string的长度.

示例:

STRLEN

获取key对应的string长度. 当key存放的类型不是string时, 报错.

语法:

STRLEN key 

命令有效版本: 2.2.0之后. 时间复杂度:O(1)

返回值: string的长度. 或者当key不存在时, 返回0.