Redis数据结构String命令详解

字符串String

字符串类型是 Redis 中最基本的数据类型,它是二进制安全的,任何形式的字符串都可以存储,包括二进制数据、序列化后的数据、JSON 化的对象,甚至是一张经 Base64 编码后的图片。
String 类型的键最大能存储 512MB 的数据。

设置键值对

set命令:设置单个键值对
SET key value [EX seconds] [PX milliseconds] [NX|XX] 

SET 命令的可选参数如下。

  • EX seconds:用于设置 key 的过期时间为多少秒(seconds)。其中,SET key value EX seconds 等价于 SETEX key seconds value。
  • PX milliseconds:用于设置 key 的过期时间为多少毫秒(milliseconds)。其中,SET key value PX milliseconds 等价于 PSETEX key milliseconds value。
  • NX:表示当 key 不存在时,才对 key 进行设置操作。其中,SET key value NX 等价于 SETNX key value。
  • XX:表示当 key 存在时,才对 key 进行设置操作。

返回值:如果 SET 命令设置成功,则会返回 OK。如果设置了 NX 或 XX,但因为条件不足而设置失败,则会返回空批量回复(NULL Bulk Reply)。

mset命令:设置多个键值对
MSET key value [key value...] 

MSET 命令是一个原子性操作,所有给定 key 都会在同一时间内被设置更新,不存在某些 key 被更新了而另一些 key 没有被更新的情况
返回值:总是返回 OK,因为 MSET 命令不可能设置失败。

setnx命令:设置不存在的键值对
SETNX key value

SETNX 是 set if not exists 的缩写。如果 key 不存在,则设置值,当且仅当 key 不存在时。如果 key 已经存在,则 SETNX 什么也不做。
返回值:SETNX 命令设置成功返回 1,设置失败返回 0。

msetnx命令:设置多个不存在的键值对
MSETNX key value [key value...] 

使用 MSETNX 命令同时设置多个键值对,当且仅当所有给定 key 都不存在时设置。与MSET 命令类似,如果有一个给定 key 已经存在,那么 MSETNX 命令也会拒绝执行所有给定 key 的设置操作。MSETNX 命令是原子性的,它可以用来设置多个不同 key 表示不同字段的唯一性逻辑对象,所有字段要么全部被设置,要么全部设置失败。
返回值:所有 key 设置成功返回 1;如果所有给定 key 都设置失败,则返回 0。

获取键值对

get命令:获取键值对的值
GET key

使用 GET 命令获取 key 中设置的字符串值。如果 key 中存储的值不是字符串类型的,则会返回一个错误,因为 GET 命令只能用于处理字符串的值;当 key 不存在时,返回 nil。
返回值:当 key 存在时,返回 key 所对应的值;如果 key 不存在,则返回 nil;如果 key不是字符串类型的,则返回错误。

mget命令:获取多个键值对的值
MGET key [key...] 

使用 MGET 命令同时返回多个给定 key 的值,key 之间使用空格隔开。如果在给定的key 中有不存在的 key,那么这个 key 返回的值为 nil。
返回值:一个包含所有给定 key 的值的列表。

getrange命令:获取键的子字符串值
GETRANGE key start end 

使用 GETRANGE 命令来获取 key 中字符串值从 start 开始到 end 结束的子字符串,下标从 0 开始(字符串截取)。start 和 end 参数是整数,可以取负值。当取负值时,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个字符,以此类推。
返回值:返回截取的子字符串。

键值对的偏移量

setbit命令:设置键的偏移量
SETBIT key offset value 

使用 SETBIT 命令对 key 所存储的字符串值设置或清除指定偏移量上的位(bit)。value参数值决定了位的设置或清除,value 值取 0 或 1。当 key 不存在时,自动生成一个新的字符串值。这个字符串是动态的,它可以扩展,以确保将 value 保存到指定的偏移量上。当这个字符串扩展时,使用 0 来填充空白位置。offset 参数必须是大于或等于 0,并且小于 2^32(bit 映射被限制在 512MB 之内)的正整数。在默认情况下,bit 初始化为 0。
返回值:返回指定偏移量原来存储的位。
警告:当set最后一个bit(offset等于232-1)并且key还没有一个字符串value或者其value是个比较小的字符串时,Redis需要立即分配所有内存,这有可能会导致服务阻塞一会。在一台2010MacBook Pro上,offset为232-1(分配512MB)需要~300ms,offset为230-1(分配128MB)需要~80ms,offset为228-1(分配32MB)需要~30ms,offset为226-1(分配8MB)需要8ms。注意,一旦第一次内存分配完,后面对同一个key调用SETBIT就不会预先得到内存分配。

getbit命令:获取键的偏移量值
GETBIT key offset 

对 key 所存储的字符串值,使用 GETBIT 命令来获取指定偏移量上的位(bit)。当 offset的值超过了字符串的最大长度,或者 key 不存在时,返回 0。
返回值:返回字符串值指定偏移量上的位(bit)。

设置键的生存时间

setex命令:为键设置生存时间(秒)
SETEX key seconds value 

SETEX 命令是一个原子性命令,它设置 value 与设置生存时间是在同一时间完成的。
返回值:设置成功时返回 OK;当 seconds 参数不合法时,返回错误。

psetex命令:为建设置生存时间(毫秒)
PSETEX key milliseconds value 

键值对的值操作

setrange命令:替换键的值
SETRANGE key offset value 

使用 SETRANGE 命令从指定的位置(offset)开始将 key 的值替换为新的字符串。比如旧值为helloworld,执行命令 SETRANGE 5 Redis,表示从第 5 个下标位置开始替换为新的字符串 Redis,其结果为 helloredis。如果有不存在的 key,就当作空白字符串处理。
SETRANGE 命令会确保字符串足够长,以便将 value 设置在指定的偏移量上。如果给定 key 原来存储的字符串长度比偏移量小(比如,字符串只有 4 个字符长,但设置的 offset 是 9 ),那么原字符和偏移量之间的空白将用零字节(Zerobytes,“\x00”)来填充。
返回值:返回执行 SETRANGE 命令之后的字符串的长度。

getset命令:为键设置新值
GETSET key value 

使用 GETSET 命令将给定 key 的值设置为 value,并返回 key 的旧值。当 key 存在但不是字符串类型时,将会返回错误。
返回值:返回给定 key 的旧值。如果 key 不存在,则返回 nil;如果 key 存在但不是字符串类型的,则返回错误。

append命令:为键追加值
append key value

如果 key 存在且是字符串类型的,则将 value 值追加到 key 旧值的末尾。如果 key 不存在,则将 key 设置值为 value。
返回值:返回追加 value 之后,key 中字符串的长度。

键值对的计算

bitcount命令:计算比特位数量
BITCOUNT key [start] [end] 

使用BITCOUNT命令计算在给定的字符串中被设置为1的比特位数量。它有两个参数:start 和 end。如果不设置这两个参数,则表示它会对整个字符串进行计数;如果指定了这两个参数值,则可以让计数只在特定的位上进行。start 和 end 参数都是整数值,可以取负数,比如,-1 表示字符串的最后一个字节,-2 表示字符串的倒数第二个字节,以此类推。如果被计数的 key 不存在,就会被当成空字符串来处理,其计数结果为0。
返回值:执行 BITCOUNT 命令之后,返回被设置为 1 的位的数量。

bitop命令:对键进行位元计算
BITOP operation destkey key [key...] 

使用 BITOP 命令对一个或多个保存二进制位的字符串 key 进行位元运算,并将运算结果保存到 destkey中。operation 表示位元操作符,它可以是 AND、OR、NOT、XOR 这 4种操作中的任意一种。具体操作如下。

  • BITOP AND destkey key [key…]:表示对一个或多个 key 求逻辑并,并将结果保存到destkey 中。
  • BITOP OR destkey key [key…]:表示对一个或多个 key 求逻辑或,并将结果保存到destkey 中。
  • BITOP NOT destkey key:表示对给定 key 求逻辑非,并将结果保存到 destkey 中。
  • BITOP XOR destkey key [key…]:表示对一个或多个 key 求逻辑异或,并将结果保存到 destkey 中。

除 NOT 操作之外,其余的操作都可以接收一个或多个 key 作为参数。当使用 BITOP 命令来进行不同长度的字符串的位元运算时,较短的那个字符串所缺少的部分将会被看作 0。空的 key 也被看作包含 0 的字符串序列。
返回值:返回保存到 destkey 中的字符串的长度,这个长度和输入 key 中最长的字符串的长度相等。

strlen命令:统计键的值的字符长度
strlen key

使用命令 STRLEN 统计 key 的值的字符长度。当 key 存储的不是字符串时,返回一个错误。当 key 不存在时,返回 0。

键值对的增量

decr命令:让键的值减一
decr key

使用 DECR 命令将 key 中存储的数字值减 1。如果 key 不存在,则 key 的值先被初始化为 0,再执行 DECR 操作减 1。注意,这个命令只能对数字类型的数据进行操作(自减)。如果 key 对应的值包含错误类型,或者字符串类型的值不能表示为数字,则将返回一个错误。DECR 操作的值限制在 64 位(bit)有符号数字表示范围之内。

decrby命令:键的值减去减量值
DECRBY key decrement 

使用 DECRBY 命令将 key 所存储的值减去减量值 decrement。如果 key 不存在,则 key的值先被初始化为 0,再执行 DECRBY 命令。如果 DECRBY 命令操作的值包含错误的类型,或者字符串类型的值不能表示为数字,则将返回一个错误。DECRBY 操作的数值限制在 64 位(bit)有符号数字表示范围之内。

incr命令:让键的值加一
incr key

使用 INCR 命令将 key 中存储的数字值加 1。如果 key 不存在,则 key 的值先被初始化为 0,再执行 INCR 操作加 1。注意,这个命令只能对数字类型的数据进行操作(自增)。如果 INCR 操作的值包含错误的类型,或者字符串类型的值不能表示为数字,则将返回一个错误。INCR 操作的值限制在 64 位(bit)有符号数字表示范围之内。

incrby命令:让键的值加上增量值
incrby key increment

使用 INCRBY 命令将 key 所存储的值加上增量值 increment。如果 key 不存在,则 key的值先被初始化为 0,再执行 INCRBY 命令。如果 INCRBY 操作的值包含错误的类型,或者字符串类型的值不能表示为数字,则将返回一个错误。INCRBY 操作的值限制在 64 位(bit)有符号数字表示范围之内。

INCRBYFLOAT 命令:让键的值加上浮点数增量值
INCRBYFLOAT key increment 

使用 INCRBYFLOAT 命令将 key 所存储的值加上浮点数增量值 increment。如果 key 不存在,则 key 的值先被初始化为 0,再执行 INCRBYFLOAT 命令。如果 INCRBYFLOAT 命令执行成功,那么 key 的值会被更新为命令执行后的新值,并且新值以字符串的形式返回给调用者。产生的新值和浮点数增量值 increment 都可以使用像 3.0e9、4e7、8e-3 这样的指数符号来表示。
在执行 INCRBYFLOAT 命令之后,产生的值会以相同的形式存储,都是由一个数字、一个可选的小数点、一个任意位数的小数部分组成的。小数部分末尾的 0 会被忽略掉。在有特定需要时,浮点数也会转化为整数,比如,2.0 会被保存为 2。如果 INCRBYFLOAT操作的 key 的值不是字符串类型的,或者 key 所对应的值、给定的浮点数增量值 increment不能表示为双精度浮点数,则会返回一个错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值