Redis 的命令详解 - String 篇

相关文章redis

Redis 的命令详解 - Key 篇
Redis 的命令详解 - Hash 篇
Redis 的命令详解 - List 篇
Redis 的命令详解 - SET 篇数组

String 命令详解

跟 String 相关的命令一共有 24 种,这里只介绍经常使用的。想查看所有命令请参考官网安全

SET : 添加一个键值对

起始版本:1.0.0
时间复杂度:O(1) 假设附加值很小,而且已经存在的值具备任意大小,则摊销时间复杂度为O(1),由于Redis使用的动态字符串库会使每一个从新分配上的可用空间加倍。bash

SET 执行时,若是 key 已存在,不管其 value 是什么类型,value 都会被覆盖,先前与 key 关联的生存时间将被丢弃。post

语法

SET key value [EX 秒|PX 毫秒] [NX|XX]spa

可选参数 从Redis 2.6.12开始,SET支持一下选项code

  • EX 秒 : 设置生存时间,以秒为单位
  • PX 毫秒 : 设置生存时间,以毫秒为单位
  • NX : key 不存在时才添加
  • XX : key 存在时才添加

注意:因为 SET 命令的选项能够替换 SETNX、SETEX、PSETEX,所以在 Redis 的将来版本中,这三个命令可能会被弃用并最终删除。 cdn

返回值

  • 若是没有知足 NX 或 XX 的条件致使 set 命令没有执行,返回 null
  • set 成功,返回ok

MSET : 批量添加键值对

起始版本:1.0.1
时间复杂度:O(N),其中N是要设置的键值对数量blog

将给定的 key 设置其各自的 value
与常规 SET 同样,MSET 用新 value 替换旧 value。若是您不想覆盖现有值,请使用 MSETNX内存

MSET 是原子性操做,全部的键值对都是同时set的。客户端不会看到某些键值对已经set 而某些键值对尚未set

语法

MSET key1 value1 [key2 value2...]

返回值

  • 老是OK,由于MSET不会失败。

MSETNX : 安全批量添加键值对

起始版本:1.0.1
时间复杂度:O(N),其中N是要设置的键值对数量

将给定的 key 设置其各自的 value
MSET 不一样,只要有一个 key 已存在,全部的键值对都不会被 set。因为这种特性,MSETNX 能够实现要么全部的操做都成功,要么全部的操做都失败。

MSETNX 也是原子性的,set 时,全部的键值对都是同时set的。客户端不会看到某些键值对已经set 而某些键值对尚未set

语法

MSETNX key1 value1 [key2 value2 ...]

返回值

  • 1 : 全部键值对都添加成功
  • 0 : 全部键值对都添加失败

SETRANGE : 覆盖 key 对应 vlue 的部分字符

起始版本:2.2.0
时间复杂度:O(1)

SETRANGE 的做用是覆盖 key 对应的 value 的一部分,从指定的下标开始覆盖, 覆盖的长度为指定的字符串的长度。
若是下标超过 value 最大下标,则在 value 末尾追加字符串。
不存在的 keys 被认为是空字符串("")。

注意,下标最大能够是 2^29-1=536870911 ,由于 redis 字符串限制在 512M 大小。若是你须要超过这个大小,你能够用多个keys。

警告:当 SETRANGE 从最后一个字节开始 set 时,若是 key 不存在,或者 value 是个比较小的字符串时,Redis须要当即分配内存来知足 set 后的总长度,这有可能会致使服务阻塞一会而,可是阻塞时间不会很长。 在一台 2010MacBook Pro 上,set 536870911字节(分配512MB)须要~300ms,set 134217728字节(分配128MB)须要~80ms,set 33554432比特位(分配32MB)须要~30ms,set 8388608比特(分配8MB)须要8ms。 注意,一旦第一次内存分配完,后面对同一个key调用 SETRANGE 就不会预先获得内存分配。

语法

SETRANGE key 下标 value

  • 下标从 0 开始
  • 包含下标自己
  • 不能使用负下标

返回值

修改后的字符串长度

应用

有了SETRANGEGETRANGE 命令,你能够把 Redis 的字符串当成线性数组,随机访问,时间复杂度只有O(1)。这在不少真实场景应用里很是快和高效。

GETSET : 设置 key 的 value 并返回旧 value

起始版本:1.0.0
时间复杂度:O(1)

设置 key 为新 value,并返回旧 value,该操做是原子性的

语法

GETSET key value

返回值

  • 若是 key 不存在,返回 null
  • 若是 value 不是 string 类型,返回错误
  • 成功,则返回旧 value

APPEND : 给 value 追加字符

起始版本:2.0.0
时间复杂度:O(1) 。假设附加值很小,而且已经存在的值具备任意大小,则摊销时间复杂度为O(1) ,由于Redis使用的动态字符串库会使每一个从新分配上的可用空间加倍。

  • 若是 key 已经存在,而且在 value字符串类型APPEND 命令将在 value 的末尾追加字符。
  • 若是 key 已经存在,但 value 不是字符串类型APPEND 命令会报错
  • 若是 key 不存在,则建立。此时,做用相似于SET。

语法

APPEND key 字符串

返回值

追加后,value 的长度

GET : 获取一个key的value

起始版本:1.0.0
时间复杂度:O(1)

语法

GET key

返回值

  • 若是 key 不存在,返回 nil
  • 若是 value 不是 string 类型, 返回错误
  • 正常状况,返回 value

MGET : 获取多个 key 的 value

起始版本:1.0.0
时间复杂度:O(N),其中N是 key 的数目。

语法

MGET key1 [key2...]

返回值

  • 若是 key 不存在,返回 nil
  • 若是 value 不是 string 类型, 返回错误
  • 正常状况,返回 value 列表
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
复制代码

GETRANGE : 获取一个key的value的子串

起始版本:2.4.0
时间复杂度:O(N),N是字符串长度,复杂度由最终返回长度决定,但因为经过一个字符串建立子字符串是很容易的,它能够被认为是O(1)。

警告:这个命令改过名字,在小于2.0的Redis版本中叫SUBSTR。 
复制代码

语法

GETRANGE key 开始下标 结束下标

下标从0开始,包括开始下标,也包括结束下标

可使用负数下标。好比 -1 表示倒数第一个

返回值

  • 若是 key 不存在,返回 nil
  • 若是 value 不是 string 类型, 返回错误
  • 正常状况,返回子串

STRLEN : 获取 key 对应 value 的字符串长度

起始版本:2.2.0
时间复杂度:O(1)

语法

STRLEN key

返回值

  • 字符串的长度
  • 0,key不存在, 或者 value 为 ""
  • 错误,当 value 不是 string 类型时

INCR : 给 value 加 1

起始版本:1.0.0
时间复杂度:O(1)

key 对应的 value 加一。

  • 若是 key 不存在,则建立 key 并设置 value 为 0 后,在加 1。
  • 若是 value 值不能转换成整数(好比 value 是 hash 类型、value 是 “ABC”、value 为 1.5),则返回错误。

此操做仅限于64位带符号整数。

注意:这是一个字符串操做,由于Redis没有专用的整数类型。存储在key处的字符串被解释为以10进制的64位带符号整数来执行该操做。

语法

INCR key

返回值

加后的值

INCRBY : 给 value 加上一个整数

起始版本:1.0.0
时间复杂度:O(1)

key 对应的 value 加上一个整数。

  • 若是 key 不存在,则建立 key 并设置 value 为 0 后,在加上设置的整数。
  • 若是 value 值不能转换成整数(好比 value 是 hash 类型、value 是 “ABC”、value 为 1.5),则返回错误。

此操做仅限于64位带符号整数。

语法

INCRBY key 整数

返回值

加后的值

INCRBYFLOAT : 给 value 加上一个数(能够是浮点数)

起始版本:2.6.0
时间复杂度:O(1)

key 对应的 value 加上一个数(能够是浮点数)。

  • 若是 key 不存在,则建立 key 并设置 value 为 0 后,在加上设置的数(能够是浮点数)。
  • 若是 value 值不能转换成数(能够是浮点数)(好比 value 是 hash 类型、value 是 “ABC”),则返回错误。

语法

INCRBYFLOAT key 数

返回值

加后的值。无论原始值是多少,也无论加的值是多少,最终结果最多只会保留小数点后17位,所以精度可能会有损失。

DECR : 给 value 减 1

起始版本:1.0.0
时间复杂度:O(1)

key 对应的 value 减一。

  • 若是 key 不存在,则建立 key 并设置 value 为 0 后,在减 1。
  • 若是 value 值不能转换成整数(好比 value 是 hash 类型、value 是 “ABC”、value 为 1.5),则返回错误。

此操做仅限于64位带符号整数。

语法

DECR key

返回值

减后的值

DECRBY : 给 value 减去一个整数

起始版本:1.0.0
时间复杂度:O(1)

key 对应的 value 减去一个整数。

  • 若是 key 不存在,则建立 key 并设置 value 为 0 后,在减去设置的整数。
  • 若是 value 值不能转换成整数(好比 value 是 hash 类型、value 是 “ABC”、value 为 1.5),则返回错误。

此操做仅限于64位带符号整数。

语法

DECRBY key 整数

返回值

减后的值

相关文章
相关标签/搜索