相关文章redis
Redis 的命令详解 - Key 篇
Redis 的命令详解 - Hash 篇
Redis 的命令详解 - List 篇
Redis 的命令详解 - SET 篇数组
跟 String 相关的命令一共有 24 种,这里只介绍经常使用的。想查看所有命令请参考官网安全
起始版本: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
注意:因为 SET 命令的选项能够替换 SETNX、SETEX、PSETEX,所以在 Redis 的将来版本中,这三个命令可能会被弃用并最终删除。 cdn
set
命令没有执行,返回 nullset
成功,返回ok起始版本:1.0.1
时间复杂度:O(N),其中N是要设置的键值对数量blog
将给定的 key 设置其各自的 value 。
与常规 SET
同样,MSET
用新 value 替换旧 value。若是您不想覆盖现有值,请使用 MSETNX
。内存
MSET
是原子性操做,全部的键值对都是同时set
的。客户端不会看到某些键值对已经set
而某些键值对尚未set
MSET key1 value1 [key2 value2...]
MSET
不会失败。起始版本:1.0.1
时间复杂度:O(N),其中N是要设置的键值对数量
将给定的 key 设置其各自的 value 。
与 MSET
不一样,只要有一个 key 已存在,全部的键值对都不会被 set
。因为这种特性,MSETNX
能够实现要么全部的操做都成功,要么全部的操做都失败。
MSETNX
也是原子性的,set
时,全部的键值对都是同时set
的。客户端不会看到某些键值对已经set
而某些键值对尚未set
MSETNX key1 value1 [key2 value2 ...]
起始版本: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
修改后的字符串长度
有了SETRANGE
和 GETRANGE
命令,你能够把 Redis 的字符串当成线性数组,随机访问,时间复杂度只有O(1)。这在不少真实场景应用里很是快和高效。
起始版本:1.0.0
时间复杂度:O(1)
设置 key 为新 value,并返回旧 value,该操做是原子性的
GETSET key value
起始版本:2.0.0
时间复杂度:O(1) 。假设附加值很小,而且已经存在的值具备任意大小,则摊销时间复杂度为O(1) ,由于Redis使用的动态字符串库会使每一个从新分配上的可用空间加倍。
APPEND
命令将在 value 的末尾追加字符。APPEND
命令会报错key
不存在,则建立。此时,做用相似于SET。APPEND key 字符串
追加后,value
的长度
起始版本:1.0.0
时间复杂度:O(1)
GET key
nil
起始版本:1.0.0
时间复杂度:O(N),其中N是 key 的数目。
MGET key1 [key2...]
nil
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
复制代码
起始版本:2.4.0
时间复杂度:O(N),N是字符串长度,复杂度由最终返回长度决定,但因为经过一个字符串建立子字符串是很容易的,它能够被认为是O(1)。
警告:这个命令改过名字,在小于2.0的Redis版本中叫SUBSTR。
复制代码
GETRANGE key 开始下标 结束下标
下标从0开始,包括开始下标,也包括结束下标。
nil
起始版本:2.2.0
时间复杂度:O(1)
STRLEN key
起始版本:1.0.0
时间复杂度:O(1)
将 key 对应的 value 加一。
此操做仅限于64位带符号整数。
注意:这是一个字符串操做,由于Redis没有专用的整数类型。存储在key处的字符串被解释为以10进制的64位带符号整数来执行该操做。
INCR key
加后的值
起始版本:1.0.0
时间复杂度:O(1)
将 key 对应的 value 加上一个整数。
此操做仅限于64位带符号整数。
INCRBY key 整数
加后的值
起始版本:2.6.0
时间复杂度:O(1)
将 key 对应的 value 加上一个数(能够是浮点数)。
INCRBYFLOAT key 数
加后的值。无论原始值是多少,也无论加的值是多少,最终结果最多只会保留小数点后17位,所以精度可能会有损失。
起始版本:1.0.0
时间复杂度:O(1)
将 key 对应的 value 减一。
此操做仅限于64位带符号整数。
DECR key
减后的值
起始版本:1.0.0
时间复杂度:O(1)
将 key 对应的 value 减去一个整数。
此操做仅限于64位带符号整数。
DECRBY key 整数
减后的值