当前位置: 首页 > news >正文

redis 基本命令-17 (KEYS、EXISTS、TYPE、TTL)

Redis 基本命令:KEYS、EXISTS、TYPE、TTL

Redis 提供了一套基本命令,这些命令对于管理密钥和了解数据库中存储的数据至关重要。这些命令虽然简单,但提供了对 Redis 实例的结构和状态的重要见解。具体来说,KEYS、``EXISTS、``TYPE 和 TTL 允许您检查、验证和管理数据的生命周期。掌握这些命令是高效使用 Redis 的基础,并为更高级的作奠定了基础。

了解 KEYS 命令

KEYS 命令用于检索与指定模式匹配的键。虽然功能强大,但了解其含义至关重要,尤其是在生产环境中。

语法和用法

KEYS 命令的语法很简单:

KEYS pattern

pattern 参数是 glob 样式的模式。以下是一些常见模式:

  • *:匹配所有内容。
  • h?llo:匹配 hellohallo 和 hxllo
  • h*llo:匹配 hlloheellohillo 和 heeeello
  • h[ae]llo:匹配 hello 和 hallo,但不匹配 hillo
  • h[^e]llo:匹配 hallohbllo、…,但不匹配 hello
  • h[a-b]llo:匹配 hallo 和 hbllo

例:

假设您的 Redis 数据库中有以下键:user:1000user:1001user:1002product:1product:2 和 session:123

  • KEYS user:* 将返回 user:1000user:1001 和 user:1002
  • KEYS product:* 将返回 product:1 和 product:2
  • KEYS *:* 将返回上面列出的所有键。
  • KEYS user:100? 将返回 user:1000user:1001 和 user:1002

性能注意事项

KEYS 命令扫描整个密钥空间,这在大型数据库上可能非常慢。这可能会阻止其他作并降低性能。 避免在生产环境中使用 KEYS

选择:

  • SCAN: 使用 SCAN 命令,该命令提供了一种迭代方式来检索密钥。它返回一个游标,您可以使用该游标批量检索键,从而最大限度地减少对性能的影响。我们将在后面的模块中介绍 SCAN
  • 集: 维护一个包含特定类型的所有键的单独集。当您需要检索这些键时,只需检索集的成员即可。
  • 键命名约定: 使用一致的键命名约定,以便更轻松地以编程方式识别和检索键,而无需依赖模式匹配。

使用 SCAN 的示例(简要介绍 - 后面的模块中将详细介绍):

您将迭代使用 SCAN,而不是 KEYS *

SCAN 0 MATCH * COUNT 10

此命令返回一个光标和一个键列表。然后,您将在下一个 SCAN 命令中使用返回的光标,直到光标为 0,这表示您已经迭代了整个键空间。

实践练习

  1. 将以下键添加到您的 Redis 数据库:user:1user:2product:1order:1
  2. 使用 KEYS 命令检索以 user: 开头的所有密钥。
  3. 使用 KEYS 命令检索包含数字 1 的所有键。
  4. 考虑如果您有数百万个键的潜在性能影响。

了解 EXISTS 命令

EXISTS 命令检查 Redis 数据库中是否存在键。如果键存在,则返回 1,如果键不存在,则返回 0

语法和用法

EXISTS key [key ...]

您可以在单个命令中检查是否存在多个键。

例:

SET mykey "Hello"
EXISTS mykey  // Returns 1
EXISTS nonexistingkey // Returns 0
EXISTS mykey nonexistingkey // Returns 1 (because at least one key exists)

实际应用

  • 条件操作: 在对密钥执行作之前,使用 EXISTS 检查密钥是否存在。例如,您可能希望仅在用户配置文件已存在时才更新该配置文件。
  • 数据验证: 在尝试检索键的值之前,请使用 EXISTS 验证键是否存在。这可以防止错误并提高应用程序的稳健性。
  • 缓存: 使用 EXISTS 检查值是否已缓存,然后再从速度较慢的数据源中检索该值。

示例:条件更新

if (redis.exists("user:123")) {// User exists, update their profileredis.hset("user:123", "name", "New Name");
} else {// User does not exist, create a new profileredis.hset("user:123", "name", "New User");
}

实践练习

  1. 设置名为 mykey 的键,其值为 myvalue
  2. 使用 EXISTS 命令检查 mykey 是否存在。
  3. 使用 EXISTS 命令检查是否存在名为 nonexistentkey 的键。
  4. 使用 EXISTS 命令检查 mykey 和 nonexistentkey 是否都存在。

了解 TYPE 命令

TYPE 命令返回存储在给定键中的数据类型。Redis 支持多种数据类型,包括:

  • string
  • list
  • set
  • zset(排序集)
  • hash
  • stream

如果密钥不存在,则命令返回 none

语法和用法

TYPE key

例:

SET mykey "Hello"
TYPE mykey // Returns "string"LPUSH mylist "World"
TYPE mylist // Returns "list"SADD myset "Element"
TYPE myset // Returns "set"HSET myhash field value
TYPE myhash // Returns "hash"ZADD myzset 1.0 element
TYPE myzset // Returns "zset"TYPE nonexistingkey // Returns "none"

实际应用

  • 数据验证: 使用 TYPE 确保键在对键执行作之前包含预期的数据类型。这可以防止错误并确保数据完整性。
  • 调试: 使用 TYPE 在调试 Redis 应用程序的问题时检查键的数据类型。
  • 多态运算: 在某些情况下,您可能希望根据键的数据类型执行不同的作。 使用 TYPE 命令可以实现这种多态行为。

示例:数据验证

if (redis.type("mykey") == "string") {// Key is a string, perform string-specific operationsString value = redis.get("mykey");System.out.println("Value: " + value);
} else {// Key is not a string, handle the errorSystem.out.println("Error: Key is not a string");
}

实践练习

  1. 设置一个名为 mykey 的键,字符串值为 myvalue
  2. 创建一个名为 mylist 的列表,其中包含元素 item1 和 item2
  3. 创建一个名为 myhash 的哈希,其中包含字段 field1 和 field2 以及相应的值 value1 和 value2
  4. 使用 TYPE 命令确定 mykeymylistmyhash 和不存在的密钥的数据类型。

了解 TTL 命令

TTL (Time To Live) 命令返回具有关联到期时间的密钥的剩余生存时间 (以秒为单位)。

语法和用法

TTL key

返回值:

  • 正整数: 剩余生存时间(以秒为单位)。
  • -1: 密钥存在,但没有关联的过期时间。
  • -阿拉伯数字: 密钥不存在。

例:

SET mykey "Hello" EX 10  // Set key with 10-second expiration
TTL mykey // Returns a value between 0 and 10 (depending on how much time has passed)TTL nonexistingkey // Returns -2SET anotherkey "World"
TTL anotherkey // Returns -1

实际应用

  • 缓存管理: 使用 TTL 监控缓存数据的过期时间,并根据需要刷新缓存。
  • 会话管理: 使用 TTL 跟踪用户会话的过期时间,并在用户处于非活动状态一段时间后自动注销。
  • 速率限制: 将 TTL 与其他命令结合使用以实现速率限制机制。

示例:缓存刷新

if (redis.ttl("cached_data") < 60) {// Cache is about to expire, refresh itString data = retrieveDataFromDatabase();redis.setex("cached_data", 3600, data); // Set with 1-hour expiration
}

修改过期时间

  • EXPIRE 密钥秒: 将 key 的过期时间设置为指定的秒数。
  • PEXPIRE 密钥毫秒: 将 key 的过期时间设置为指定的毫秒数。
  • PERSIST 键: 删除密钥的过期时间,使其持久化。

例:

SET mykey "Hello"
EXPIRE mykey 60 // Set expiration to 60 seconds
TTL mykey // Returns a value between 0 and 60PERSIST mykey
TTL mykey // Returns -1

实践练习

  1. 设置一个名为 mykey 的键,其值为 myvalue,有效期为 30 秒。
  2. 使用 TTL 命令检查 mykey 的剩余生存时间。
  3. 使用 EXPIRE 命令将 mykey 的过期时间再延长 60 秒。
  4. 使用 PERSIST 命令从 mykey 中删除过期时间。
  5. 验证 TTL 命令现在是否为 mykey 返回 -1。

这些基本命令是与 Redis 交互的基本构建块。了解如何有效地使用它们将使您能够更有效地管理数据并构建强大的应用程序。

http://www.xdnf.cn/news/606709.html

相关文章:

  • 新手SEO高效入门实战精要
  • 40 岁 Windows 开启 AI 转型:从系统到生态的智能重构
  • 「MATLAB」计算校验和 Checksum
  • C++:动态刷新打印内容
  • 使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第二部分)
  • 【Elasticsearch】给所索引创建多个别名
  • 【Bluedroid】蓝牙HID Host disconnect流程源码解析
  • UE4游戏查找本地角色数据的方法-SDK
  • 从零开始的抽奖系统创作(4)
  • FPGA 42 ,时序约束深度解析与实战应用指南( FPGA 时序约束 )
  • 分享|16个含源码和数据集的计算机视觉实战项目
  • VMware虚拟机突然无法ssh连接
  • Spring Boot WebFlux流式返回全攻略:从基础到企业级实践
  • PHP7内核剖析 学习笔记 第八章 命名空间
  • Python打卡DAY34
  • 亚马逊搜索代理: 终极指南
  • 线性回归中涉及的数学基础
  • 嵌入式学习笔记 - freeRTOS链表中pxIndex->pxPrevious 与pxIndex->pxPrevious->的区别
  • DB-GPT扩展自定义Agent配置说明
  • 微信小程序调用蓝牙API “wx.writeBLECharacteristicValue()“ 报 errCode: 10008 的解决方案
  • GMP模型入门
  • Lyra学习笔记1地图角色加载流程
  • 树莓派WiringPi库
  • 大模型「瘦身」指南:从LLaMA到MobileBERT的轻量化部署实战
  • php 根据另一个数组中 create_time 的时间顺序,对原始数组进行排序。
  • Neo4j入门第一期(Cypher入门)
  • RabbitMQ ⑥-集群 || Raft || 仲裁队列
  • CentOS 7.6 升级 Openssl 及 Openssh 方法文档
  • Unity EventCenter 消息中心的设计与实现
  • EasyExcel使用