• Redis通用命令详解



    一、Redis概述

    Redis概述

    在这里插入图片描述

    1.1 KEYS:查看符合模板的所有 key

    在这里插入图片描述

    KEYS 命令在处理大量数据时可能会影响 Redis 服务器的性能,因为它会遍历所有 key 来寻找匹配的项。

    在这里插入图片描述

    在生产环境中,应该谨慎使用 KEYS 命令,尤其是在数据量巨大的情况下。

    redis> MSET firstname Jack lastname Stuntman age 35
    "OK"
    redis> KEYS *name*
    1) "lastname"
    2) "firstname"
    redis> KEYS a??
    1) "age"
    redis> KEYS *
    1) "lastname"
    2) "age"
    3) "firstname"
    redis> 
    
    

    首先使用 MSET 命令设置了多个 key-value 对,分别为 firstnamelastnameage。然后使用 KEYS 命令查找符合指定模式的 key。

    • 第一个 KEYS 命令使用模式 *name*,返回所有包含 “name” 的 key,即 lastnamefirstname
    • 第二个 KEYS 命令使用模式 a??,返回所有以字母 “a” 开头并且后面有两个字符的 key,即 age
    • 最后一个 KEYS 命令使用模式 *,返回所有存在的 key,即 lastnameagefirstname

    1.2 DEL:删除一个指定的 key

    在这里插入图片描述

    在 Redis 中,DEL 命令用于删除指定的 key,并返回成功删除的 key 的数量。

    在这里插入图片描述

    redis> SET key1 "Hello"
    "OK"
    redis> SET key2 "World"
    "OK"
    redis> DEL key1 key2 key3
    (integer) 2
    redis> 
    
    

    使用 DEL 命令删除了两个 key,即 key1key2。因为这两个 key 存在且被成功删除,所以返回的结果是 (integer) 2

    如果执行 DEL 命令删除了不存在的 key,那么返回的结果将是 (integer) 0,表示没有成功删除任何 key。


    1.3 EXISTS:判断 key 是否存在

    在这里插入图片描述

    EXISTS 命令用于判断给定的 key 是否存在于 Redis 中。它可以同时接受多个 key,并返回存在的 key 的数量。如果 key 存在,则返回 1;如果 key 不存在,则返回 0。
    在这里插入图片描述

    redis> SET key1 "Hello"
    "OK"
    redis> EXISTS key1
    (integer) 1
    redis> EXISTS nosuchkey
    (integer) 0
    redis> SET key2 "World"
    "OK"
    redis> EXISTS key1 key2 nosuchkey
    (integer) 2
    redis> 
    

    使用 SET 命令分别设置了 key1key2 的值。然后使用 EXISTS 命令来检查指定的 key 是否存在。

    • 第一个 EXISTS 命令执行 EXISTS key1,返回结果为 (integer) 1,表示 key1 存在。
    • 第二个 EXISTS 命令执行 EXISTS nosuchkey,返回结果为 (integer) 0,表示 nosuchkey 不存在。
    • 接下来执行 EXISTS key1 key2 nosuchkey,返回结果为 (integer) 2,表示其中两个 key 存在,即 key1key2,而 nosuchkey 不存在。

    Tips:
    在这里插入图片描述
    如果在参数中多次提到相同的现有键,它将被计算多次。如果somekey存在,exists somekey somekey将返回2。


    1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除

     命令用于设置键的过期时间,让键在一定时间后自动删除。这里是命令的详细解释:

    EXPIRE key seconds [NX | XX | GT | LT]
    
    • key:要设置过期时间的键名。

    • seconds:过期时间,单位为秒。键在指定秒数后将会被自动删除。

    • NX:(可选)仅在键不存在时设置过期时间。

    • XX:(可选)仅在键已存在时设置过期时间。

    • GT:(可选)仅在键的当前过期时间大于给定过期时间时设置过期时间。

    • LT:(可选)仅在键的当前过期时间小于给定过期时间时设置过期时间。

    • NXXX 选项都未指定时,默认行为是设置键的过期时间,如果键不存在则创建键并设置过期时间。

    • NXXX 选项可以与 GTLT 选项结合使用,从而提供更精确的过期时间控制。

    1. 设置键 mykey 在 60 秒后过期:

      EXPIRE mykey 60
      
    2. 仅当键 mykey 存在时,设置它在 120 秒后过期:

      EXPIRE mykey 120 XX
      
    3. 仅当键 mykey 不存在时,设置它在 300 秒后过期:

      EXPIRE mykey 300 NX
      
    4. 仅当键 mykey 的当前过期时间大于 180 秒时,设置它在 180 秒后过期:

      EXPIRE mykey 180 GT
      
    5. 仅当键 mykey 的当前过期时间小于 240 秒时,设置它在 240 秒后过期:

      EXPIRE mykey 240 LT
      

    在这里插入图片描述

    redis> SET mykey "Hello"
    "OK"
    redis> EXPIRE mykey 10
    (integer) 1
    redis> TTL mykey
    (integer) 10
    redis> SET mykey "Hello World"
    "OK"
    redis> TTL mykey
    (integer) -1
    redis> EXPIRE mykey 10 XX
    (integer) 0
    redis> TTL mykey
    (integer) -1
    redis> EXPIRE mykey 10 NX
    (integer) 1
    redis> TTL mykey
    (integer) 10
    redis> 
    

    1.5 TTL:查看一个 key 的剩余有效期

    在这里插入图片描述

    TTL 命令用于获取 Redis 键的剩余生存时间(Time To Live,TTL)。

    TTL key
    
    • key:要查询剩余生存时间的键名。

    返回值

    redis> SET mykey "Hello"
    "OK"
    redis> EXPIRE mykey 10
    (integer) 1
    redis> TTL mykey
    (integer) 10
    redis> 
    
    
    • 返回键的剩余生存时间(TTL):

      • 如果键不存在或者键没有设置过期时间,返回 -1
      • 如果键存在且设置了过期时间,返回剩余生存时间的秒数。
    • 返回 -1 表示键不存在或者键没有设置过期时间。

    • 返回 0 表示键存在并且没有剩余生存时间,即键已经过期。

    • TTL 返回的时间单位是秒。


    1.6 COPY:复制 Redis 数据库中的数据到另一个数据库中

    在这里插入图片描述
    COPY 命令用于复制 Redis 数据库中的数据到另一个数据库中。

    COPY source destination [DB destination-db] [REPLACE]
    
    • source:要复制数据的源键名。

    • destination:目标键名,复制后的数据将存储在这个键中。

    • DB destination-db:(可选)目标数据库的索引号。默认为 0(即默认数据库)。

    • REPLACE:(可选)如果目标键 destination 已存在且有数据,使用 REPLACE 选项将会覆盖现有数据。如果未指定 REPLACE,并且目标键已存在,则 COPY 命令将会失败。

    • sourcedestination 参数必须是有效的键名。

    • 可以指定一个不同的目标数据库索引号,使数据被复制到该索引号对应的数据库中。

    • 使用 REPLACE 选项可以在目标键已存在时覆盖现有数据,否则命令会失败。

    示例

    1. 将键 mykey 中的数据复制到键 mykey_copy 中:

      COPY mykey mykey_copy
      
    2. 将键 mylist 中的数据复制到键 mylist_backup 中,并指定目标数据库索引号为 1:

      COPY mylist mylist_backup DB 1
      
    3. 将键 myset 中的数据复制到键 myset_new 中,如果 myset_new 已存在则覆盖现有数据:

      COPY myset myset_new REPLACE
      

    1.7 MOVE:将 Redis 中的指定键移动到另一个数据库中

    在这里插入图片描述

    MOVE 命令用于将 Redis 中的指定键移动到另一个数据库中。

    MOVE key db
    
    • key:要移动的键名。

    • db:目标数据库的索引号,用于指定移动到哪个数据库中。

    • key 参数是要移动的键名,必须存在于当前数据库中。

    • db 参数是目标数据库的索引号,用于指定移动到哪个数据库中。索引号从 0 开始,Redis 默认支持 16 个数据库,可以通过配置进行扩展。

    1. 将键 mykey 移动到数据库索引号为 1 的数据库中:

      MOVE mykey 1
      
    • 如果目标数据库 db 不存在(例如超过了默认的 0 到 15 的范围),那么 MOVE 命令会返回错误。

    • 如果键 key 已经存在于目标数据库 db 中,那么 MOVE 命令将无效,不会导致任何数据移动。

    • 当键成功移动到目标数据库时,返回 1

    • 如果键已经存在于目标数据库中,或者数据库索引号超出范围,返回 0


    1.8 TOUCH:修改指定键的最后访问时间

    在这里插入图片描述

    在 Redis 中,TOUCH 命令用于修改指定键的最后访问时间(last access time),从而更新键的过期时间。

    TOUCH key [key ...]
    
    • key:一个或多个要更新最后访问时间的键名。

    • key 参数是一个或多个键名,用空格分隔。

    • TOUCH 命令主要用于更新 Redis 键的最后访问时间:

      1. 持久化存储:如果键设置了过期时间,通过 TOUCH 命令可以防止 Redis 自动清除这些键。
      2. 活跃用户追踪:可以用于跟踪哪些键最近被访问,用作活跃用户的标记或统计。
      3. LRU(最近最少使用)策略:Redis 在使用 LRU 策略管理内存时,可以通过 TOUCH 命令更新键的访问时间,从而影响键的淘汰顺序。
    1. 更新键 mykey 的最后访问时间:

      TOUCH mykey
      
    2. 更新多个键的最后访问时间:

      TOUCH key1 key2 key3
      
    • TOUCH 命令仅更新键的最后访问时间,不改变键的值或其他属性。
    • 如果指定的键不存在,TOUCH 命令会忽略该键,不会报错。
    • TOUCH 命令可以用于确保键不会在达到过期时间后被 Redis 主动清理,适用于需要持久化存储的场景。

    返回值

    redis> SET key1 "Hello"
    "OK"
    redis> SET key2 "World"
    "OK"
    redis> TOUCH key1 key2
    (integer) 2
    redis> 
    
    
    • 返回更新的键数目,即成功更新了多少个键的最后访问时间。

    1.9 RENAME: 修改一个键的名称

    在这里插入图片描述
    在 Redis 中,RENAME 命令用于修改一个键的名称。

    RENAME key newkey
    
    • key:要修改名称的键名。

    • newkey:键的新名称。

    • RENAME 命令用于将一个键的名称修改为新的名称。如果新的键名已经存在,则会覆盖原有键的值。

    1. 将键 mykey 的名称修改为 newkey

      RENAME mykey newkey
      
    • 如果键 key 不存在,则 RENAME 命令会返回错误。
    • 如果键 newkey 已经存在,它的值将被覆盖。

    返回值

    redis> SET mykey "Hello"
    "OK"
    redis> RENAME mykey myotherkey
    "OK"
    redis> GET myotherkey
    "Hello"
    redis> 
    
    
    • 当命令成功执行时,返回 OK。

    1.10 RENAMENX:新名称的键不存在时执行修改

    在这里插入图片描述

    在 Redis 中,RENAMENX 命令用于将一个键的名称修改为新的名称,但只在新名称的键不存在时执行修改。

    RENAMENX key newkey
    
    • key:要修改名称的键名。

    • newkey:键的新名称。

    • RENAMENX 命令会检查新名称 newkey 是否已经存在。

    • 如果 newkey 已经存在,则不执行任何操作,返回 0

    • 如果 newkey 不存在,则将 key 的名称修改为 newkey

    • 如果 key 不存在,则 RENAMENX 命令会返回错误。

    • RENAMENX 命令是原子操作,即在执行过程中不会出现部分成功的情况。

    redis> SET mykey "Hello"
    "OK"
    redis> SET myotherkey "World"
    "OK"
    redis> RENAMENX mykey myotherkey
    (integer) 0
    redis> GET myotherkey
    "World"
    redis> 
    
    
    • 当成功将 key 的名称修改为 newkey 时,返回 1
    • 如果 newkey 已经存在,没有执行修改操作,则返回 0

    1.11 TYPE:返回键所存储的值的类型

    在这里插入图片描述
    TYPE 命令用于返回键所存储的值的类型。

    TYPE key
    
    • key:要查询类型的键名。
    redis> SET key1 "value"
    "OK"
    redis> LPUSH key2 "value"
    (integer) 1
    redis> SADD key3 "value"
    (integer) 1
    redis> TYPE key1
    "string"
    redis> TYPE key2
    "list"
    redis> TYPE key3
    "set"
    redis> 
    

    返回值

    • 返回键存储值的类型,可能的返回值有:
      • "none":键不存在。
      • "string":字符串类型。
      • "list":列表类型。
      • "set":集合类型。
      • "zset":有序集合类型。
      • "hash":哈希类型。
      • "stream":流类型。

    注意事项

    • 如果键不存在,命令会返回 "none"
    • 如果键存储的值类型不在预期范围内,可能是由于该键已被其他操作修改。
    • 在 Redis 中,同一个键可以在不同时间存储不同类型的值。

    1.12 PERSIST:移除 Redis 键的过期时间

    在这里插入图片描述

    PERSIST 命令用于移除 Redis 键的过期时间,使得键成为永久有效的,不再自动过期。

    PERSIST key
    
    • key:要移除过期时间的键名。

    返回值

    redis> SET mykey "Hello"
    "OK"
    redis> EXPIRE mykey 10
    (integer) 1
    redis> TTL mykey
    (integer) 10
    redis> PERSIST mykey
    (integer) 1
    redis> TTL mykey
    (integer) -1
    redis> 
    
    
    • 如果成功移除过期时间,返回 1
    • 如果键不存在过期时间,或者键不存在,返回 0

    注意事项

    • 只有带有过期时间的键才能使用 PERSIST 命令来移除过期时间。
    • 如果键之前已经被设置为永不过期(即没有设置过期时间),PERSIST 命令会返回 0
    • 移除过期时间后,键将永久存在于 Redis 中,直到显式删除。

    更多的通用命令可以去官网https://redis.io/docs/latest/commands/?group=generic查看哦~
    在这里插入图片描述

  • 相关阅读:
    Vscode禁止插件自动更新
    frp内网穿透并实现开机自启动
    2023年 DevOps 七大趋势
    基于Matlab实现图像目标边界描述
    lv_font_conv离线转换
    【Java 进阶篇】HTML 与 CSS 结合详解
    UART中的奇偶校验和粘性奇偶校验(stick parity)
    JavaScript中的const和let
    mybatis入门代码详解
    P8842 [传智杯 #4 初赛] 小卡与质数2 垃圾筛
  • 原文地址:https://blog.csdn.net/weixin_48935611/article/details/139836638