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

【Redis】基础命令数据结构

文章目录

  • 基础命令
    • keys
    • exists
    • del
    • expire
    • ttl
    • type
  • 数据结构和内部编码

在这里插入图片描述

在介绍数据类型前先介绍一下 Redis 的基础命令,方便理解

基础命令

keys

返回所有满足样式(pattern)的 key

keys pattern

当前有如下 key

PS:实际开发环境和生产环境不建议使用keys *。因为 keys 的时间复杂度是 O(N),redis 执行命令为单线程,如果数据量过大,可能会因此而阻塞,导致业务线程无法使用 redis,而造成阻塞或更严重的后果

在这里插入图片描述

支持如下样式

  • h?llo:? 可匹配任意一个字符,如 hellohallohxllo

在这里插入图片描述

  • h*llo:* 可匹配任意零个或多个字符,如 hlloheeeello

在这里插入图片描述

  • h[ae]llo:[ ]可匹配其中任意一个字符,如 hellohallo,不匹配 hillohllo

在这里插入图片描述

  • h[^e]llo:[^e] 反向匹配,除了e都可以匹配,如 hallohbllo、…,不匹配 hellohllo

在这里插入图片描述

  • h[a-e]llo:[a-e] 表示匹配 a-e 范围的任意一个字符,如 hallohbllohcllo,不匹配 hellohllo

在这里插入图片描述

exists

判断 key 是否存在,返回存在的个数

exists key [key …]
[ ] 是可选字段

数据同上,不支持样式

在这里插入图片描述

del

删除指定的 key,返回删除的个数

del key [key …]

在这里插入图片描述

expire

为指定的 key 添加秒级的过期时间(Time To Live TTL)

expire key seconds

返回值:1 表示设置成功,0表示设置失败

ttl

获取指定 key 的过期时间,秒级

ttl key

返回值:剩余过期时间,-1 表示没有关联过期时间,-2 表示 key 不存在

127.0.0.1:6379> keys *
1) "heeeeello"
2) "hello"
3) "hallo"
4) "hbllo"
127.0.0.1:6379> ttl hello
(integer) -1
127.0.0.1:6379> ttl hllo
(integer) -2
127.0.0.1:6379> expire hello 10
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 6
127.0.0.1:6379> ttl hello
(integer) 5
127.0.0.1:6379> ttl hello
(integer) -2

expire 和 ttl 都有对应的支持毫秒为单位的版本:pexpire 和 pttl,用法相同

在这里插入图片描述

type

返回 key 对应的数据类型

type key

返回值:nonestringlistsetzsethashstream
添加数据的操作后续讲解

在这里插入图片描述

数据结构和内部编码

type 命令实际返回的是当前键的数据结构类型,分别为 string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序结合),但这些只是 Redis 对外的数据结构

Redis 中 key 的数据结构都为 string,value 的数据结构有不同

在这里插入图片描述

实际 Redis 针对每种数据类型都有自己的底层内部编码实现,而且不同情况下,会有多种实现,适配不同的场景

数据结构:内部编码
数据结构内部编码
stringraw 较长时使用
int 数字
embstr 较短时使用
hashhashtable
ziplist
listlinkedlist
ziplist
quicklist
sethashtable
intset
zsetskiplist 跳表
ziplist

可以使用 object encoding 查看 value 的内部编码

object encoding key

在这里插入图片描述


以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

相关文章:

  • Spring框架核心知识全解析:从基础到实战
  • [面试]SoC验证工程师面试常见问题(六)高速接口篇
  • 含锡电镀废水深度净化技术体系解析化利用的全流程优化
  • pytest自动化测试执行环境切换的两种解决方案
  • 树莓派OS系统详解
  • 动态规划法:爬楼梯
  • C++模板梳理
  • JAVA练习题(3) 开发验证码
  • 如何避免软件腐朽
  • jflash下载时出现 Could not read unit serial number! 的解决方法
  • 数据结构—(概述)
  • 【typenum】 1 说明文件(README.md)
  • 【AI论文】迈向多模态通才之路:通用层级与通用基准
  • 一文讲透MCP的原理及实践
  • Kubernetes生产实战(十二):无工具容器网络连接数暴增指南
  • 【Day 24】HarmonyOS端云一体化开发:云函数
  • C PRIMER PLUS——第8节:字符串和字符串函数
  • 初等数论--欧拉定理及证明
  • 计算最短路径的数量模板(最短路)
  • 【智能指针】
  • 前端项目中单元测试与集成测试的管理实践
  • 基于51单片机的模拟洗衣机控制面板proteus仿真
  • JavaScript篇:async/await 错误处理指南:优雅捕获异常,告别失控的 Promise!
  • Java并发编程,从线程安全到死锁避免的实战解析
  • Java代码日志嵌入打包时间
  • 【排错】dify1.3.1插件市场安装报错问题
  • 《从零开始:构建你的第一个区块链应用》
  • 什么是文件描述符(File Descriptor,FD)
  • 45.中医知识问答管理员端对话信息查看功能bug修复(1)
  • 在 Vue 3 中实现刮刮乐抽奖