Redis中的Hash和List类型常用命令及应用分析

 更新时间:2025年08月09日 10:21:52   作者:AA-代码批发V哥  
Redis内存数据库中,除了基础的String类型外,Hash和List也是开发中频繁使用的两种数据结构,下面详细讲解Hash和List类型的特点、常用命令及典型应用场景,以便处理复杂业务需求,需要的朋友跟随小编一起看看吧

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类型基于有序链表实现,适合构建队列、栈、最新列表等场景,支持灵活的首尾操作和范围查询

到此这篇关于Redis中的Hash和List类型常用命令及应用分析的文章就介绍到这了,更多相关redis hash和list类型常用命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解redis中的下载和安装(最新推荐)

    详解redis中的下载和安装(最新推荐)

    本文详细介绍了如何在Linux和Docker上安装、配置、启动和关闭Redis,包括下载安装包、解压、编译安装、配置文件修改、前台和后台启动、关闭以及Docker容器化部署等步骤,感兴趣的朋友一起看看吧
    2025-03-03
  • 基于Redis缓存数据常见的三种问题及解决

    基于Redis缓存数据常见的三种问题及解决

    这篇文章主要介绍了基于Redis缓存数据常见的三种问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • redis适合场景八点总结

    redis适合场景八点总结

    在本篇文章中我们给大家整理了关于redis适合什么场景的8点知识点内容,需要的朋友们参考下。
    2019-06-06
  • Redis BigKey的问题解决

    Redis BigKey的问题解决

    本文主要介绍了Redis BigKey的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Redis协议具体用法详解

    Redis协议具体用法详解

    在本篇文章中小编给大家整理了关于Redis协议具体用法以及相关内容知识点,需要的朋友们学习下。
    2019-06-06
  • Redis中的数据过期策略详解

    Redis中的数据过期策略详解

    这篇文章主要介绍了Redis中的数据过期策略,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • redis的bigkey扫描脚本深入介绍

    redis的bigkey扫描脚本深入介绍

    这篇文章主要给大家介绍了关于redis的bigkey扫描脚本的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 浅谈Redis存储数据类型及存取值方法

    浅谈Redis存储数据类型及存取值方法

    这篇文章主要介绍了浅谈Redis存储数据类型及存取值方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • redis实现延时队列的两种方式(小结)

    redis实现延时队列的两种方式(小结)

    这篇文章主要介绍了redis实现延时队列的两种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 详解基于redis实现的四种常见的限流策略

    详解基于redis实现的四种常见的限流策略

    限流算法在分布式领域是一个经常被提起的话题,当系统的处理能力有限时, 如何阻止计划外的请求继续对系统施压,这是一个需要重视的问题。除了控制流量,限流还有一个应用目的是控制用户行为,避免垃圾请求
    2021-06-06

最新评论