带你玩转 Redis 的 键(key)命令

1,206 阅读7分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天, 点击查看活动详情

🎨 个人介绍

👉大家好,我是:旺仔不是程序员

👉认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥🍻

👉你的支持,是我每天更新的动力。

👉赞点:👍 留言:✍ 收藏:⭐

👉个人格言:想法一步一步的落实,才是你我前进最佳选择。

1. 什么是Reids 的 键命令

Redis 的键命令。用与管理key 的 增删改查

2. 查询键

EXISTS key

:::success EXISTS 命令:判断键是否存在

  1. key 存在,返回1
  2. key 不存在,返回0 :::

KEYS pattern

:::success KEYS 命令:查找键

  1. 用于按照指定的模式pattern 查找所有的key
  2. pattern 类似于正则表达式
  3. KEYS * :表示匹配查找数据库中的所有key
  4. kEYS r?dis :表示匹配 ?位置,任何一个字母,?仅代表任意一个字母,入:redis
  5. kEYS r*dis:表示匹配 位置,任何零个、一个或多个字母、 代表零个或多个,如:rdis、redis、reedis
  6. KEYS r[ae]dis :表示匹配radis 和 redis ,不会匹配别的,只会匹配这两种 :::

OBJECT subcommand [arguments [arguments] ]

:::success OBJECT 命令:查看键对象

  1. 用于从内部,查看给定key 的redis 对象,通常用于排错或者节省空间而对key 进行特殊处理

  2. 可以使用OBJECT 命令来决定是否清除key

  3. OBJECT 有如下命令:

    1. OBJECT REFCOUNT key :返回key引用所存储的值的次数,多用于排错
    2. OBJECT ENCODING key :返回 key 所存错的值使用的底层数据结构
    3. OBJECT IDLETIME key :返回key 自存储以来的空闲时间,以秒为单位
  4. Redis有多种编码格式

    1. 针对字符串,可以被编码为raw(一个字符串)或int(会被编码为64为有符号整数编码存储)
    2. 针对列表可以被编码为zipmap或linkedlist。ziplist 表示压缩表,表示占用空间较小的列表
    3. 针对集合可以被编码为intset 或 hashtable。intset只存储数字的小集合的特殊表示
    4. 针对哈希表可以编码为zipmap 或 hashtable。zipmap 是小哈希表的特殊表示
    5. 针对有序集合可以被编码为ziplist 或 skiplist。ziplist 主要用户表示小的有序集合,skiplist 可以表示任意大小的有序集合 :::

RANDOMKEY

:::success RANDOMKEY 命令:随机返回一个键

  1. 随机返回一个当前数据库中的一个key ,并且不会删除这个key :::

3. 修改键

RENAME key newkey

:::success RENAME 命令:修改键的名称

  1. 将key 的名称修改为 newkey
  2. key 不存在,返回一个错误
  3. newkey 已经存在,newkey 则会被覆盖 :::

RENAMWENX key newkey

:::success RENAMENX 命令:修改键的名称

  1. 仅当newkey 不存在时,才能修改
  2. key 不存在,返回一个错误 :::

4. 建的序列化

DUMP key

:::success DUMP 命令:序列化键

  1. 用户序列化给定的key,并返回被序列化的值

  2. DUMP序列化生成的值具有以下特点

    1. 有64位的校验和,用于检测错误。RESTORE 命令在进行反序列化前,会先检查校验和
    2. 这个值的编码格式和RDB文件编码格式保持一致
    3. RDB 版本会被编码在序列化值中。Redis版本不同,RDB存在不兼容,Redis就无法进行反序列化
    4. 这个序列化的值中没有生存时间值 :::

RESTORE key ttl serialized-calue [REPLACE]

:::success RESTORE 命令:对序列化值进行反序列化

  1. 将一个给定的序列化值反序列化,并为它关联给定key
  2. ttl 用与为key 设置生存时间,单位为毫秒
  3. ttl = 0,则不设置生存时间
  4. 在执行反序列化之前,会对序列化的RDB版本和数据校验并进行检查
  5. RDB版本不相同或者数据不完整,反序列化失败RESTORE 拒绝进行反序列化,返回一个错误
  6. key存在,并给定REPLACE 参数,反序列化得出的值会替代key 的旧值
  7. key存在,没有设置REPLACE 参数,则返回一个错误 :::

5. 键的生存时间

PTTL key

:::success PTTL 命令:获取键的生存时间(毫秒)

  1. 以毫秒的形式返回key的剩余时间
  2. key不存在,返回-2
  3. key存在,但是没有设置生存时间,返回-1 :::

TTL key

:::success TTL 命令:获取键的生存时间(秒)

  1. 返回key 的生存时间,以秒为单位
  2. key不存在,返回-2
  3. key存在,但是没有设置生存时间,返回-1 :::

EXPIRE key seconds

:::success EXPIRE 命令:设置键的生存时间(秒)

  1. 设置key的生存时间,key 的生存时间为 0 时,这个key 将会被删除
  2. DEL 删除 key 的生存空间 和 key
  3. 修改有生存时间的key 的值,可以使用 SET 或 GETSET,这两个命令仅修改值,不影响生存时间
  4. PERSIST 删除key 的生存时间,实现key的持久化
  5. EXPIRE 修改key 的生存时间,旧的生存时间会被新值覆盖
  6. 设置生存时间存在,返回1
  7. key 不存在,或者不能为key设置生存时间(Redis版本过低),则返回 0 :::

PEXPIRE key milliseconds - timestamp

:::success PEXPIRE 命令:设置键的生存时间(毫秒)

  1. 以毫秒为单位设置key 的过期时间UNIX 时间戳
  2. 设置生存时间存在,返回1
  3. key 不存在,或者不能为key设置生存时间(Redis版本过低),则返回 0 :::

6. 键值对操作

MIGRATE host port key destination-db timeout [COPY] [REPLACE]

:::success MIGRATE 命令:转移键值对到远程目标数据库

  1. 将key 原子性地从当前数据库转移(复制)到指定目标数据库中

  2. 转移成功,key会出现在目标数据库中,当前数据库中key 会被删除

  3. 因为原子操作,转移和被转移的数据库会被阻塞,直到成功、或失败或达到超时时间

  4. MIGRATE 的实现原理

    1. 源数据库,执行DUMP 命令,将它序列化后,再转移到目标数据库
    2. 目标数据库再使用RESTORE 命令,对数据进行反序列化,把反序列化后的数据保存到数据库中
    3. 源数据库,在遇见目标数据库执行完RESTORE, 返回ok,就会执行DEL 命令,删除key
  5. timeout:设置源数据库和目标数据库转移的最大时间,单位时毫秒

  6. MIGRATE 需要在timeout 时间内完成I/O操作,如果在执行I/O操作出现错误,或者超出timeout 时间范围,就会返回一个特殊的错误IOERR

  7. IOERR 错误的两种情况

    1. 源数据库和目标数据库中可能同时存在key
    2. key 也可能只在源数据库中存在
  8. COPY参数:表示转移之后,不会删除源数据库中的key

  9. REPLACE:表示转移过程会替代目标数据库中已经存在的key :::


MOVE key db

:::success MOVE 命令:转移键值对到本地目标数据库

  1. 将当前数据库中的key 转移到指定的数据库db中
  2. key不存在,MOVE 命令什么也不做
  3. 源数据库和目标数据路中存在相同的key ,MOVE没有任何效果 :::

SORT key [By pattern] {LIMIT offset count] [GET pattern [GET patern...] ] [ASC | DESC] [ALPHA] [STOPE destination]

:::success SORT 命令:对键值对进行排序

  1. 返回或保存给定列表、集合、有序集合 key 中经过排序的元素
  2. 排序默认时以数字为对象,值会被解释为double 类型的浮点数,然会进行比较 :::

TYPE key

:::success TYPE 命令:获取键值对的类型

  1. key 不存在:则返回none
  2. key 所对应的值是字符串类型的,则返回string
  3. key 所对应的值是列表类型的,则返回list
  4. key所对应的值是集合类型的,则返回set
  5. key 所对应的值是有序集合的类型,则返回zset
  6. key 所对应的值是哈希类型的,则返回hash :::

7. 删除键

DEL key [key...]

:::success DEL:删除键

  1. 删除一个或者多个键
  2. key 不存在,会被忽略 :::

PERSIST key

:::success PERSIST 命令:删除键的生存时间

  1. 删除key的生存时间,将带有生存时间的 key 持久化 :::

🎈看完了不妨给我点个赞吧,👉你的支持,是我每天更新的动力...