Redis---字符串命令

标签:Redis首次发布:2023-11-09最近修改:2023-11-09

常用命令

设置值

  1. set:
  • 参数:

    • ex 设置秒级的过期时间(expire)

    • px 设置毫秒级的过期时间(pexpire)

    • nx 键不存在的时候,才可以设置成功(not exist)

    • xx 键存在的时候,才能设置成功(exist)

  • 说明:如果 value 字符串中带有空格,则该字符串需要使用双引号或单引号引起来,否则会认为 set 命令的参数数量不正确,报错。

  1. setex 与 psetex:
  • 格式:setex/psetex key seconds value(ex 就是 expire 的简写)

  • 功能:不仅为 key 指定了 value,还为其设置了生存时间。setex 的单位为秒,psetex 的单位为毫秒。

  • 说明:如果 key 已经存在, 则覆写旧值。该命令类似于使用 set 命令并设置过期时间,不同之处是,setex 和 psetex 是一个原子性操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。

image-20230402155301030

  1. setnx:
  • 格式:setnx key value

  • 功能:(set if Not exist)将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 setnx 不做任何动作。成功,返回 1,否则,返回 0。

  • 说明:该命令等价于 set key value nx

image-20230402155944212

  1. mset 与 msetnx:
  • 格式:mset/msetnx key value [key value …]
  • 功能:同时设置一个或多个 key-value 对。
  • 说明:m 表示 multiple。如果某个给定 key 已经存在,那么 mset 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 msetnx 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。mset/msetnx 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。mset 命令永不失败。
image-20230402161242307 image-20230402161327969

获取值

  1. get:
  • 格式:get key

  • 功能:获取 key 中设置的字符串值

  • 返回值:key 存在,返回 key 对应的 value;key 不存在,返回 nil

  1. mget:
  • 格式:mget key [key …]
  • 功能:返回所有(一个或多个)给定 key 的值。
  • 说明:如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。

计数

  1. incr 与 decr:
  • 格式:incr key 或 decr key

  • 功能:increment,自动递增。将 key 中存储的数字值增一。decrement,自动递减。将 key 中存储的数字值减一。

  • 说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回加一或者减一后的值。

image-20230402211653363

  1. incrby 与 decrby
  • 格式:incrby key increment 或 decrbykey decrement
  • 功能:将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数。
  • 说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值。

image-20230402211838125

  1. incrbyfloat
  • 格式:incrbyfloat key increment
  • 功能:为 key 中所储存的值加上浮点数增量 increment 。
  • 说明:与之前的说明相同。没有 decrbyfloat 命令,但 increment 为负数可以实现减操作效果。incrbyfloat 也可以操作整形。

image-20230402212223335

不常用命令

追加(append)

  • 格式:append key value
  • 功能:如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, append 先将值初始化为空字符串,然后执行追加操作,最终效果与执行 set key value 类似。
  • 说明:追加 value 之后, key 中字符串的长度。

image-20230402212602654

替换 (setrange)

  • 格式:setrange key offset value
  • 功能:用 value 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始。
  • 说明:当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充;对于不存在的 key 当作空串处理。

image-20230402213600175

获取子串(getrange)

  • 格式:getrange key start end
  • 功能:返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定,包括 start 和 end 在内。
  • 说明:end 必须要比 start 大。支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。

image-20230402213155757

获取字符串长度(strlen)

  • 格式:strlen key
  • 功能:返回 key 所储存的字符串值的长度。
  • 说明:当 key 储存的不是字符串值时,返回一个错误;当 key 不存在时,返回 0 。

image-20230402214053774

设置新值返回旧值 (getset)

  • 格式:getset key value
  • 功能:将给定 key 的值设为 value ,并返回 key 的旧值。
  • 说明:当 key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回 nil 。

image-20230406183833792

位操作命令

名称中包含 BIT 的命令,都是对二进制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield。详见:Redis 位操作命令(CSDN)

内部编码

String 类型的 redisObject 内部对应了三种物理编码方式:int、embstr、raw

  • int: 保存的是 long 型(长整型)的 64 位(8 个字节)有符号整数。只有整数才会使用 int,如果是浮点数,Redis 内部会先将浮点数转换为字符串,然后保存字符串值。

  • embstr:代表的是 embstr 格式的简单的动态字符串(Simple Dynamic String,SDS),是可以修改的字符串,内部结构实现上类似于 Java 的 ArrayList 采用分配冗余空间的方式来减少内存的频繁分配。保存长度小于 44 字节的字符串。

img

  • raw: 保存长度大于 44 字节的字符串

image-20230406185839312