Redis 常见数据类型

Redis 常见数据类型


一、基本全局命令详解与实操
1. KEYS 命令

功能:按模式匹配返回所有符合条件的键(生产环境慎用,可能导致阻塞)。
语法

KEYS pattern  

模式规则

  • h?llo:匹配 hello, hallo?表示单个字符)。
  • h*llo:匹配 hllo, heeeello*表示任意字符)。
  • h[ae]llo:匹配 hello, hallo[]内为可选字符)。
  • h[^e]llo:排除 h后第二个字符为 e 的键(如 hxllo)。

示例

127.0.0.1:6379> MSET user:1:name Alice user:2:name Bob  
OK  
127.0.0.1:6379> KEYS user:*:name  
1) "user:1:name"  
2) "user:2:name"  

警告

  • 在数据量大的数据库中执行 KEYS * 可能导致服务卡顿,建议用 SCAN 代替。

2. EXISTS 命令

功能:检查一个或多个键是否存在。
语法

EXISTS key [key ...]  

返回值:存在的键数量(0~N)。

示例

127.0.0.1:6379> SET key1 "value"  
OK  
127.0.0.1:6379> EXISTS key1 key2  
(integer) 1  # 只有 key1 存在  

3. DEL 命令

功能:删除一个或多个键(无视数据类型)。
语法

DEL key [key ...]  

返回值:成功删除的键数。

示例

127.0.0.1:6379> SET key1 "v1"  
OK  
127.0.0.1:6379> DEL key1 key2  
(integer) 1  # key2 不存在,仅删除 key1  

4. EXPIRE / TTL 命令

功能:设置键的过期时间(秒) / 查看剩余存活时间。
语法

EXPIRE key seconds      # 设置过期时间  
TTL key                 # 查看剩余时间  

返回值

  • EXPIRE:1(成功),0(键不存在或设置失败)。
  • TTL:剩余秒数,-1(无过期时间),-2(键不存在)。

示例

127.0.0.1:6379> SET session:123 "data"  
OK  
127.0.0.1:6379> EXPIRE session:123 300  # 5分钟后过期  
(integer) 1  
127.0.0.1:6379> TTL session:123  
(integer) 297  # 剩余297秒  

扩展操作

  • PEXPIRE:以毫秒为单位设置过期时间。
  • PERSIST:移除键的过期时间,使其永久有效。

5. TYPE 命令

功能:返回键对应的数据类型。
语法

TYPE key  

返回值string, hash, list, set, zset, stream, none(键不存在)。

示例

127.0.0.1:6379> LPUSH mylist "a" "b"  
(integer) 2  
127.0.0.1:6379> TYPE mylist  
list  

二、数据结构与内部编码深度解析
1. 查看内部编码

命令OBJECT ENCODING key
示例

127.0.0.1:6379> SET num 100  
OK  
127.0.0.1:6379> OBJECT ENCODING num  
"int"          # 存储为整数  127.0.0.1:6379> SET long_str "A very long string..."  
OK  
127.0.0.1:6379> OBJECT ENCODING long_str  
"raw"          # 存储为普通字符串  
2. 各数据结构的内部编码规则
数据结构默认编码触发条件(可配置)
stringint (整数)值可表示为64位有符号整数。
embstr (短字符串)字符串长度 ≤ 39字节(Redis 5.0+)。
raw (长字符串)字符串长度 > 39字节。
hashziplist字段数 ≤ hash-max-ziplist-entries(默认512),且字段值长度 ≤ hash-max-ziplist-value(默认64字节)。
hashtable超出上述阈值时自动转换。
listziplist元素数 ≤ list-max-ziplist-entries(默认512),且元素值长度 ≤ list-max-ziplist-value(默认64字节)。
linkedlist超出阈值时转换。

配置调整示例(修改 redis.conf):

hash-max-ziplist-entries 1024  # 哈希字段数超过1024时转hashtable  
list-max-ziplist-size -2       # 列表元素大小动态调整(默认值)  

三、单线程架构原理与优化
1. 单线程模型核心机制
  • 纯内存操作:数据全在内存中,无需磁盘I/O。
  • I/O多路复用
    • 使用 epoll(Linux)监听多个客户端连接。
    • 事件驱动模型,将连接、读写事件转换为队列任务。
  • 无锁设计:所有命令串行执行,避免竞态条件。
2. 性能瓶颈与规避方法
  • 长耗时命令
    • 避免使用 KEYS *FLUSHALL、复杂 Lua 脚本。
    • 使用 SCAN 代替 KEYS,分批次遍历键。
  • 大Key问题
    • 拆分大哈希/列表(如将 user:1000:friends 拆分为多个键)。
    • 使用 UNLINK(异步删除)代替 DEL
3. 监控与调优命令
  • 查看命令执行时间
    SLOWLOG GET 5  # 获取最近5条慢查询日志  
    
  • 内存分析
    MEMORY USAGE key  # 查看键的内存占用(单位字节)  
    

四、操作验证实验
实验1:观察字符串编码变化
  1. 设置不同长度的字符串:
    127.0.0.1:6379> SET small "abc"  
    OK  
    127.0.0.1:6379> OBJECT ENCODING small  
    "embstr"  127.0.0.1:6379> SET large "This is a very long string..."  # 长度超过39字节  
    OK  
    127.0.0.1:6379> OBJECT ENCODING large  
    "raw"  
    
实验2:哈希编码转换测试
  1. 创建小哈希:
    127.0.0.1:6379> HMSET user:1000 name "Alice" age 30  
    OK  
    127.0.0.1:6379> OBJECT ENCODING user:1000  
    "ziplist"  
    
  2. 添加大字段触发转换:
    127.0.0.1:6379> HSET user:1000 bio "A very long biography..."  # 字段值超过64字节  
    (integer) 1  
    127.0.0.1:6379> OBJECT ENCODING user:1000  
    "hashtable"  
    

总结

  • 全局命令:需注意 KEYS 的性能风险,优先使用 SCAN
  • 内部编码:通过 OBJECT ENCODING 和配置文件优化内存与性能。
  • 单线程优化:避免长耗时操作,合理设计数据结构和命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

33号远征队 - 游玩鉴赏

风景很好画质很好 , 图片太大只能截图一小部分 地编和特效 值得参考

使用JMETER中的JSON提取器实现接口关联

一、JSON提取器介绍 JSON提取器是JMETER工具中用于从JSON响应中提取数据的重要组件,常常用于接口关联场景中(参数传递)。 二、添加JSON提取器 举例(积分支付接口请求数据依赖于创建订单接口响应的payOrderId) 1.在…

QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。

(112) (113)模仿随书老师给的源代码搭建的, LCD 显示的部分不一样 : (114)以下开始代码完善: 关联定时器的信号与槽函数 : (115)…

nvidia-smi 和 nvcc -V 作用分别是什么?

命令1:nvidia-smi 可以查看当前显卡的驱动版本,以及该驱动支持的CUDA版本。 命令2:nvcc -V 可以看到实际安装的CUDA工具包版本为 12.8 更详细的介绍,可以参考如下链接

Excel 数据 可视化 + 自动化!Excel 对比软件

各位Excel小能手们!你们有没有过要对比两个Excel表格数据差异,却看得眼睛都花了的经历?其实啊,现在有专门的Excel文件比较软件能帮咱解决这大难题。这软件就是用来快速找出两个或多个Excel表格数据不同之处,还能把修改…

《软件项目经济性论证报告模板:全面解析与策略建议》

《软件项目经济性论证报告模板:全面解析与策略建议》 一、引言 1.1 项目背景阐述 在数字化浪潮席卷全球的当下,各行业对软件的依赖程度日益加深。[行业名称] 行业也不例外,随着业务规模的不断扩张、业务复杂度的持续提升以及市场竞争的愈发激烈,对高效、智能、定制化软件…

高频工业RFID读写器-三格电子

高频工业RFID读写器 型号:SG-HF40-485、SG-HF40-TCP 产品功能 高频工业读写器(RFID)产品用在自动化生产线,自动化分拣系统,零部件组装产线等情境下,在自动化节点的工位上部署RFID读写设备,通过与制品的交互&#xf…

2025年5月计划(linux+Gpu精粹催眠+UE独立游戏)

终于步入正轨了,4月份为了各种面试,一会学这,一会学那。 现在,有大量的业余时间了,也该干点正事了。 按照规划, 1,ue独立游戏(十分钟的视频即可) 2,linux-&…

计算机学习路线与编程语言选择(信息差)

——授人以鱼不如授人以渔 计算机学习公式:1/3科班思维 1/3路线选择 1/3工程能力 好工作随便找(来自B站小毛毛熊) 本文主要是路线选择!!!下面开始吧。 面向岗位学习!到招聘网站看看有哪些…

『Python学习笔记』ubuntu解决matplotlit中文乱码的问题!

ubuntu解决matplotlit中文乱码的问题! 文章目录 simhei.ttf字体下载链接:http://xiazaiziti.com/210356.html将字体放到合适的地方 sudo cp SimHei.ttf /usr/share/fonts/(base) zkfzkf:~$ fc-list | grep -i "SimHei" /usr/local/share/font…

电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档

电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档 概述 本脚本real_data_model.m基于论文《大规模电动汽车充换电设施可调能力聚合评估与预测》(鲍志远,胡泽春)实现了电动汽车充电设施的负荷预测和可调能力评估。使用混合模型(LSTM神经网络线…

C#生成二维码和条形码

C# 实现二维码和条形码生成:从入门到实战 文章目录 C# 实现二维码和条形码生成:从入门到实战一、引言二、准备工作2.1 开发环境搭建2.2 引入相关库 三、生成条形码3.1 条形码基本概念3.2 使用[ZXing.Net](https://ZXing.Net)生成条形码3.2.1 核心代码实现…

C++结构体介绍

结构体的定义 在C中,结构体(struct)是一种用户定义的数据类型,允许将不同类型的数据组合在一起。结构体的定义使用struct关键字,后跟结构体名称和一对花括号{},花括号内包含成员变量的声明。 struct Pers…

各类音频放大器电路原理简析

A类(甲类)放大器 晶体管在整个信号周期内始终导通,导通角为360 本质上是一个简单的共源放大电路,M1 是放大管,M2 为电流源管负载,其最大输出电流受ID2控制,带负载能力弱。 B类(乙类…

OpenCV的 ccalib 模块用于自定义标定板的检测和处理类cv::ccalib::CustomPattern()----函数calibrate

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ccalib::CustomPattern 是OpenCV的 ccalib 模块中的一个类,主要用于自定义标定板的检测和处理。这个模块提供了比传统的 calib3d…

【从零开始学习RabbitMQ | 第一篇】从异步通信到交换机

目录 前言 1.什么是RabbitMQ? 2.同步调用的优缺点 3.异步调用的优缺点 3.1优点: 3.2异步调用的问题是什么? 4技术选型 4.1AMQP协议就是: 4.2kafka和RabbitMQ的使用场景 5.安装RabitMq 6.rabitmq的整体架构 7.RabibtM…

Dify MCP实战 - 邮件发送

安装MCP sse插件 配置MCP Server 由于Dify 目前还没有支持stdio方式连接MCP Server。我们找到了Zapier,轻松调用 7000 App 工具。 Zapier配置 • 访问 https://actions.zapier.com/settings/mcp/ • 添加Gmail Send Email工具 • 授权自己的Gmail邮箱 • 复制Za…

uniapp 微信小程序使用图表

使用的是秋云 ucharts 直接在hbuilder插件市场进行下载导入项目中,多端支持 下载地址秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 导入成功后这里就能看到导入的插件啦 导入项目后就可以直接在页面中通过组件使用了 不需要其余配置 使用简单 参…

Python数据脱敏技术在大模型机器学习中的深度应用与实践

一、数据脱敏技术体系详解 1.1 结构化数据脱敏技术 1.1.1 列级脱敏策略 import pandas as pd from faker import Fakerclass StructuredDataMasker:def __init__(self):self.faker =

【设计模式】GoF设计模式之策略模式(Strategy Pattern)

设计模式之策略模式 Strategy Pattern V1.0核心概念角色代码示例程序运行结果代码讲解 适用范围 V1.0 核心概念 策略模式是一种行为型设计模式,其核心思想是业务类执行某个动作时,可以使用该动作的不同的实现,并在程序运行中可以切换使用该…