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

Redis之Hash和List类型常用命令

Redis之Hash和List类型常用命令

    • 一、Hash类型详解
      • 1. Hash类型的特点
      • 2. 常用命令及示例
        • (1)设置字段值
        • (2)获取字段值
        • (3)删除字段
        • (4)其他常用命令
      • 3. 应用场景
    • 二、List类型详解
      • 1. List类型的特点
      • 2. 常用命令及示例
        • (1)添加元素
        • (2)获取元素
        • (3)列表长度与修剪
        • (4)其他常用命令
      • 3. 应用场景

Redis内存数据库中,除了基础的String类型外,Hash和List也是开发中频繁使用的两种数据结构,下面详细讲解Hash和List类型的特点、常用命令及典型应用场景,以便处理复杂业务需求。

一、Hash类型详解

Hash类型(哈希)是一个键值对集合,类似于Java中的HashMap或Python中的字典。它适合存储对象类数据,能够实现对对象属性的精准操作,避免了String类型中序列化整个对象的开销。

1. Hash类型的特点

  • 键值结构:每个Hash类型的键(key)下包含多个字段(field)和对应的值(value)
  • 二进制安全:field和value都支持二进制数据
  • 内存高效:存储对象数据比String类型更节省空间
  • 操作灵活:可单独对某个字段进行CRUD,无需操作整个对象

2. 常用命令及示例

假设我们要存储用户信息,以user:100作为Hash的键,包含idnameageemail等字段。

(1)设置字段值
  • HSET key field value:为哈希表中的字段设置值,返回受影响的字段数量

    127.0.0.1:6379> HSET user:100 id 100 name "张三" age 25
    (integer) 3
    
  • HMSET key field1 value1 field2 value2 …:同时设置多个字段值(Redis 4.0.0后推荐使用HSET替代)

    127.0.0.1:6379> HMSET user:100 email "zhangsan@example.com" gender "男"
    OK
    
(2)获取字段值
  • HGET key field:获取哈希表中指定字段的值

    127.0.0.1:6379> HGET user:100 name
    "张三"
    
  • HMGET key field1 field2 …:获取多个字段的值

    127.0.0.1:6379> HMGET user:100 id age gender
    1) "100"
    2) "25"
    3) "男"
    
  • HGETALL key:获取哈希表中所有字段和值

    127.0.0.1:6379> HGETALL user:100
    1) "id"
    2) "100"
    3) "name"
    4) "张三"
    5) "age"
    6) "25"
    ...
    
(3)删除字段
  • HDEL key field1 field2 …:删除哈希表中的一个或多个字段,返回删除的字段数量
    127.0.0.1:6379> HDEL user:100 gender
    (integer) 1
    
(4)其他常用命令
  • HEXISTS key field:判断字段是否存在,存在返回1,否则返回0

    127.0.0.1:6379> HEXISTS user:100 email
    (integer) 1
    
  • HLEN key:获取哈希表中字段的数量

    127.0.0.1:6379> HLEN user:100
    (integer) 4
    
  • HKEYS key:获取哈希表中所有字段名

    127.0.0.1:6379> HKEYS user:100
    1) "id"
    2) "name"
    3) "age"
    4) "email"
    
  • HVALS key:获取哈希表中所有字段值

    127.0.0.1:6379> HVALS user:100
    1) "100"
    2) "张三"
    3) "25"
    4) "zhangsan@example.com"
    
  • HINCRBY key field increment:为数字类型字段增加指定增量

    127.0.0.1:6379> HINCRBY user:100 age 1
    (integer) 26
    

3. 应用场景

  • 存储对象数据:如用户信息、商品详情、订单数据等
  • 统计数据:如用户的关注数、粉丝数、文章阅读量等
  • 配置信息:存储应用的各种配置项,支持单独更新某个配置

二、List类型详解

List类型(列表)是一个有序的字符串集合,类似于Java中的LinkedList,允许元素重复,底层采用双向链表结构实现,适合做队列或栈操作。

1. List类型的特点

  • 有序性:元素按照插入顺序排序
  • 双向操作:可从头部和尾部插入/删除元素
  • 灵活的范围操作:支持获取指定索引范围的元素
  • 内存高效:链表结构对元素的增删操作效率高

2. 常用命令及示例

以存储文章评论列表为例,使用article:100:comments作为List的键。

(1)添加元素
  • LPUSH key value1 value2 …:从列表头部插入一个或多个元素,返回插入后列表的长度

    127.0.0.1:6379> LPUSH article:100:comments "这篇文章很有用" "学习了"
    (integer) 2
    
  • RPUSH key value1 value2 …:从列表尾部插入一个或多个元素

    127.0.0.1:6379> RPUSH article:100:comments "感谢分享"
    (integer) 3
    
(2)获取元素
  • LPOP key:移除并返回列表的第一个元素

    127.0.0.1:6379> LPOP article:100:comments
    "学习了"
    
  • RPOP key:移除并返回列表的最后一个元素

    127.0.0.1:6379> RPOP article:100:comments
    "感谢分享"
    
  • LRANGE key start stop:获取列表中指定范围的元素(0表示第一个元素,-1表示最后一个元素)

    127.0.0.1:6379> LPUSH article:100:comments "评论1" "评论2" "评论3"
    (integer) 4
    127.0.0.1:6379> LRANGE article:100:comments 0 -1
    1) "评论3"
    2) "评论2"
    3) "评论1"
    4) "这篇文章很有用"
    
  • LINDEX key index:获取列表中指定索引的元素

    127.0.0.1:6379> LINDEX article:100:comments 1
    "评论2"
    
(3)列表长度与修剪
  • LLEN key:获取列表的长度

    127.0.0.1:6379> LLEN article:100:comments
    (integer) 4
    
  • LTRIM key start stop:保留列表中指定范围的元素,删除其他元素

    127.0.0.1:6379> LTRIM article:100:comments 0 1
    OK
    127.0.0.1:6379> LRANGE article:100:comments 0 -1
    1) "评论3"
    2) "评论2"
    
(4)其他常用命令
  • LREM key count value:删除列表中与value相等的元素,count指定删除数量(正数从头部开始,负数从尾部开始,0删除所有)

    127.0.0.1:6379> LREM article:100:comments 1 "评论2"
    (integer) 1
    
  • LSET key index value:设置列表中指定索引的元素值

    127.0.0.1:6379> LSET article:100:comments 0 "最新评论"
    OK
    
  • RPOPLPUSH source destination:移除source列表的最后一个元素,并将其添加到destination列表的头部

    127.0.0.1:6379> RPOPLPUSH article:100:comments article:101:comments
    "这篇文章很有用"
    

3. 应用场景

  • 消息队列:利用LPUSH+RPOP实现简单的FIFO(先进先出)队列
  • 栈结构:使用LPUSH+LPOP或RPUSH+RPOP实现LIFO(后进先出)栈
  • 最新列表:如最新文章、最新评论,使用LPUSH添加,LRANGE获取前N条
  • 排行榜:结合LTRIM可实现固定长度的排行榜
  • 任务队列:通过RPOPLPUSH实现安全的任务处理(避免任务丢失)

总结

  • Hash类型适合存储对象类数据,支持对单个字段的精准操作,是存储用户信息、商品详情等数据的理想选择
  • List类型基于有序链表实现,适合构建队列、栈、最新列表等场景,支持灵活的首尾操作和范围查询

若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ

http://www.lryc.cn/news/609882.html

相关文章:

  • Dubbo 3.x源码(32)—Dubbo Provider处理服务调用请求源码
  • 《算法导论》第 1 章 - 算法在计算中的作用
  • Java开发时出现的问题---语言特性与基础机制陷阱
  • 从HTTP到WebSocket:打造极速实时通讯体验
  • 安全扫描:目标主机支持RSA密钥交换问题
  • 国产化低代码平台如何筑牢企业数字化安全底座
  • 消防器材检测数据集介绍-9,600 张图片 智慧安防系统 建筑施工安全监管 AI 消防巡检机器人 自动审核系统 公共场所安全监测
  • Solidity全局变量与安全实践指南
  • [论文阅读] 人工智能 + 教学 | 从代码到职业:用机器学习预测竞赛程序员的就业潜力
  • 安全扫描:目标使用过期的TLS1.0 版协议问题
  • 【乐企板式文件】不动产销售类发票已支持
  • MySQL三大日志详解(binlog、undo log、redo log)
  • 赋能未来:数字孪生驱动能源系统智能化升级
  • 【项目实践】在系统接入天气api,根据当前天气提醒,做好plan
  • Linux(centos)安全狗
  • 【芯片设计专用执行单元:PWM如何重塑能源与智能控制】
  • sqli-labs靶场less29~less35
  • 2025.08.04 移除元素
  • 【测试工程思考】测试自动化基础能力建设
  • 使用mybatis生成器生成实体类mapper和查询参数文件,实现简单增删改查。使用log4j输出日志到控制台。使用配置文件注册Bean,配置视图解析器
  • 每天学一个Linux命令(38):vi/vim
  • Excel商业智能分析报表 【销售管理分析仪】
  • 免费MCP: JSON 转 Excel MCP
  • Vim 高效使用指南
  • Flutter 事件总线 Event Bus
  • HarmonyOS 多屏适配最佳实践:基于 ArkUI 的响应式 UI 方案
  • 计算机网络:理解路由的下一跳
  • 第四十六章:AI的“瞬时记忆”与“高效聚焦”:llama.cpp的KV Cache与Attention机制
  • C++ 中 initializer_list 类型推导
  • 2.1 vue组件