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

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 和配置文件优化内存与性能。
  • 单线程优化:避免长耗时操作,合理设计数据结构和命令。

相关文章:

Redis 常见数据类型

Redis 常见数据类型 一、基本全局命令详解与实操 1. KEYS 命令 功能:按模式匹配返回所有符合条件的键(生产环境慎用,可能导致阻塞)。 语法: KEYS pattern 模式规则: h?llo:匹配 hello, ha…...

TextRNN 模型实现微博文本情感分类

在自然语言处理(NLP)领域,文本情感分类是一项极具应用价值的任务。它能帮助企业分析用户反馈、社交媒体舆情监测等。本文将通过一段实际代码,带大家了解如何利用 PyTorch 框架和 TextRNN 模型,完成微博文本的情感分类工…...

SAP note 3565626 : Baltimore CyberTrust 根证书即将过期

SAP note 3565626 : Baltimore CyberTrust 根证书即将过期 20250512 2025年5月9日 症状 您已收到来⾃ SAP Integration Suite/Cloud Integration 服务的通知邮件, 建议 Baltimore CyberTrust 根证书将于 2025 年 5 ⽉ 12 ⽇ 过期,其中 Balt…...

4.3 Thymeleaf案例演示:图书管理

本项目通过整合 Thymeleaf 实现了一个简单的图书管理系统。系统功能包括查询所有图书、按条件查询图书、根据用户角色显示按钮以及借阅图书。通过 Spring Boot 框架搭建项目,创建了用户和图书的实体类,以及图书的数据访问类和控制器。在 Thymeleaf 模板中…...

STM32GPIO输入实战-key按键easy_button库移植

STM32GPIO输入实战-key按键easy_button库移植 一,ebtn介绍二,ebtn移植三,组件库的思想组成1. 事件驱动 (Event-Driven) 🛎️ —— 像按门铃2. 状态机 (State Machine) 🚦 —— 像红绿灯3. 回调函数 (Callback Function…...

【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题

个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 递归、搜索和回溯递归搜索VS 深度优先遍历 VS 深度优先搜索 VS 宽度优先遍历 VS 宽度优先搜索 VS 暴搜回溯与剪枝 1 面试题 08.06. 汉诺塔问题1.1 分析…...

JDK8 HashMap红黑树退化为链表的机制解析

目录 1、数据结构: 2、Fail-Fast机制 2.1、核心作用 2.2、实现原理 2.3、触发场景 2.4、实现细节 2.5、对比 2.6、注意事项 3、核心结论 4、转化安全机制 4.1. 触发场景 4.2. 转换过程 4.3. 并发安全机制 5、设计原因 5.1. 性能权衡 5.2. 空间局部性…...

【基础】模型上下文协议(Model Context Protocol, MCP)根本原理与工作机制详解

一、MCP的根本原理 模型上下文协议(MCP)是一种标准化接口协议,旨在解决AI系统(尤其是大型语言模型,LLM)与外部工具、数据源之间的交互碎片化问题。其核心原理可以概括为以下三点: 统一接口抽象…...

霸王茶姬微信小程序自动化签到系统完整实现解析

霸王茶姬微信小程序自动化签到系统完整实现解析 技术栈:Node.js 微信小程序API MD5动态签名 一、脚本全景架构 功能模块图 #mermaid-svg-0vx5W2xo0IZWn6mH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...

北斗导航 | RTKLib中重难点技术,公式,代码

Rtklib 一、抗差自适应卡尔曼滤波1. **核心难点**2. **公式与代码实现**二、模糊度固定与LAMBDA算法1. **核心难点**2. **LAMBDA算法实现**3. **部分模糊度固定技术**三、伪距单点定位与误差修正1. **多系统多频点修正**2. **接收机钟差与系统间偏差**四、动态模型与周跳处理1.…...

p2p虚拟服务器

ZeroTier Central ✅ 推荐工具:ZeroTier(免费、稳定、跨平台) ZeroTier 可以帮你把多台设备(无论是否跨网)加入一个虚拟局域网,彼此间可以像在同一个 LAN 中通信,UDP 视频、文件传输、SSH 等都…...

Python 爬虫基础入门教程(超详细)

一、什么是爬虫? 网络爬虫(Web Crawler),又称网页蜘蛛,是一种自动抓取互联网信息的程序。爬虫会模拟人的浏览行为,向网站发送请求,然后获取网页内容并提取有用的数据。 二、Python爬虫的基本原…...

python实现点餐系统

使用python实现点餐系统的增加菜品及价格,删除菜品,查询菜单,点菜以及会员折扣价等功能。 代码: 下面展示一些 内联代码片。 # coding utf-8menu {拍黄瓜: 6, 小炒肉: 28, 西红柿炒蛋: 18, 烤鱼: 30, 红烧肉: 38, 手撕鸡: 45,…...

(三)毛子整洁架构(Infrastructure层/DapperHelper/乐观锁)

文章目录 项目地址一、Infrastructure Layer1.1 创建Application层需要的服务1. Clock服务2. Email 服务3. 注册服务 1.2 数据库服务1. 表配置Configurations2. Respository实现3. 数据库链接Factory实现4. Dapper的DataOnly服务实现5. 所有数据库服务注册 1.3 基于RowVersion的…...

探索Stream流:高效数据处理的秘密武器

不可变集合 stream流 Stream流的使用步骤: 先得到一条Stream流(流水线),并把数据放上去 使用中间方法对流水线上的数据进行操作 使用终结方法对流水线上的数据进行操作 Stream流的中间方法 注意1:中间方法&#xff0…...

git高效杀器——cz-customizable 搭配 commitlint

What is cz-customizable and commitlint? cz-customizable 一款可定制化的Commitizen插件(也可作为独立工具),旨在帮助创建如约定式提交规范的一致性提交消息。commitlint commitlint 是一个用于检查 Git 提交信息的工具,它可以帮助开发者保持提交信息的规范性和一致性。…...

虚拟机ubantu20.04系统桥接模式下无法ping通外网,但可以ping通本机的解决方案

1.出现的问题: 虚拟机ubantu20.04系统桥接模式下无法ping通外网,但可以ping通本机。 2.解决方案: 如果 DHCP 未分配 IP 地址,可以手动配置静态 IP: 1.编辑网络配置文件: sudo nano /etc/netplan/01-netcfg.yaml 2…...

日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)

新入职的公司在某些场景下无脑使用组播技术,自己突然就意识到一个问题:单播,组播,广播,哪个更省带宽? 有所收获,做点笔记,仅仅是个人理解~ 1:简单理解 单播&#xff1…...

qtcreater配置opencv

我配置opencv不管是按照网上的教程还是deep seek发现都有些问题,下面是我的配置方法以及实践成功的心得 电脑环境 windows平台qt6 下载 我这里直接提供官网下载地址:https://opencv.org/releases/ 我下载的是最新版,下载后是一个.exe文件…...

详解 c++17 重载类 overload的每一条语句,附实例.

author: hjjdebug date: 2025年 05月 09日 星期五 16:21:03 CST description: 详解 c17 重载类 overload的每一条语句 文章目录 1. template 模板类.2. class... Ts 是什么意思?3. template<class... Ts> 是什么意思&#xff1f;4. overload 是什么&#xff1f;5. Ts...…...

机器学习-数据集划分和特征工程

一.数据集划分 API函数&#xff1a; sklearn.model_selection.train_test_split(*arrays&#xff0c;**options) 参数&#xff1a; - arrays&#xff1a;多个数组&#xff0c;可以是列表&#xff0c;numpy数组&#xff0c;也可以是dataframe数据框等 - options&#xff1a;&…...

MySQL C API高效编程:C语言实现数据库操作的深入解析

知识点【MySQL C API】 1、头文件及MYSQL * 句柄 //头文件 #include <mysql/mysql.h>1、MYSQL MYSQL是一个结构体&#xff0c;封装了与数据库连接相关的所有状态&#xff0c;配置和数据。 2、MYSQL *的本质 类似于 FILE*&#xff0c;代表一个与数据库连接的通道&…...

MySQL初阶:数据库约束和表的设计

数据库约束 数据库约束是针对数据库中的表中的数据进行施加规则和条件&#xff0c;用于确保数据的准确性和可靠性。 数据库约束类型 1&#xff09;not null 非空类型 &#xff1a;指定非空类型的列不能存储null&#xff0c;如果插入的数据是null便会报错。 2&#xff09;de…...

LeetCode 解题思路 47(最长回文子串、最长公共子序列)

解题思路&#xff1a; dp 数组的含义&#xff1a; dp[i][j] 是否为回文子串。递推公式&#xff1a; dp[i][j] s.charAt(i) s.charAt(j) && dp[i 1][j - 1]。dp 数组初始化&#xff1a; 单字符 dp[i][i] true&#xff0c;双字符 dp[i][i 1] s.charAt(i) s.charA…...

左支座加工工艺与钻φ25孔专用夹具设计

1 零件结构与工艺分析 1.1 零件结构特征 本左支座为典型箱体类零件&#xff0c;采用HT200灰铸铁铸造毛坯。主体结构包含&#xff1a; 20015080mm安装基面 2φ12定位孔&#xff08;公差H7&#xff09; φ250.02主轴承孔&#xff08;表面粗糙度Ra1.6&#xff09; 4M10螺纹安…...

基于Qwen-14b的基础RAG实现及反思

1、概览 本文主要介绍RAG的基础实现过程&#xff0c;给初学者提供一些帮助&#xff0c;RAG即检索增强生成&#xff0c;主要是两个步骤&#xff1a;检索、生成&#xff0c;下面将基于这两部分进行介绍。 2、检索 检索的主要目的是在自定义的知识库kb中查询到与问题query相关的候…...

嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算

目录 一、结构体&#xff08;struct关键字&#xff09; &#xff08;一&#xff09;声明一个结构体数据类型 &#xff08;二&#xff09;结构体的成员初始化与赋值 a、结构体变量赋值 b、结构体成员初始化 c、结构体的定义形式 &#xff08;三&#xff09;考点&#xff…...

极狐GitLab 命名空间的类型有哪些?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 命名空间 命名空间在极狐GitLab 中组织项目。因为每一个命名空间都是单独的&#xff0c;您可以在多个命名空间中使用相同的项…...

N6715C 基础型定制配置直流电源分析仪

N6715C 基础型定制配置直流电源分析仪 综述 N6715C 是一款可定制的直流电源分析仪系统&#xff0c;在装运之前已经过全面测试并组装完毕。 每台 N6715C 包括一个 N6705C 主机和 1 至 4 个模块。 模块作为 E6715C 的选件订购。 主要特点 ◆ ◆ 4 插槽主机最多可安装 4 个模块…...

4.1【LLaMA-Factory 实战】医疗领域大模型:从数据到部署的全流程实践

【LLaMA-Factory实战】医疗领域大模型&#xff1a;从数据到部署的全流程实践 一、引言 在医疗AI领域&#xff0c;构建专业的疾病诊断助手需要解决数据稀缺、知识专业性强、安全合规等多重挑战。本文基于LLaMA-Factory框架&#xff0c;详细介绍如何从0到1打造一个垂直领域的医…...