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.pswp.cn/news/917595.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917595.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917595.shtml

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

相关文章

【测试】⾃动化测试概念篇

本节⽬标:⾃动化测试Web⾃动化测试selenium1. ⾃动化1.1 ⾃动化概念⾃动化在⽣活中处处可⻅,⾃动的代替⼈的⾏为完成操作。⾃动洒⽔机,主要通上⽔就可以⾃动化洒⽔并且可以⾃动的旋转。⾃动洗⼿液,免去了⼿动挤压可以⾃动感应出洗…

Java中给List<T> 对象集合去重

Java中给List 对象集合去重List<Student> getStudentList studentMapper.getStudentList();List<Student> distinctInsurance distinctByField(getStudentList, Student::getCertNo);public static <T> List<T> distinctByField(List<T> list…

最小二乘法MSE

最小二乘法MSEx1x2x3x4x5x6x7x8x0y014805-29-31339-41064-14-2-1481-114-1-65-123-32-21305-23105114-81126-15-15-8-157-4-1221-39511-10-243-9-671-87-1404-35101371422-3-7-2-80-6-5-91-3091前景知识: 矩阵相关公式y(339−11430126−395−87422−309)y\begin{pmatrix} 339&a…

Pixel 4D 3.4.4.0 | 支持丰富的壁纸资源,高清画质,高度的个性化设置能力,智能推荐功能

Pixel 4D是一款功能强大且用户体验良好的动态壁纸应用。它提供了丰富的壁纸资源和高清画质&#xff0c;让用户可以轻松找到自己喜欢的壁纸。此外&#xff0c;该应用还具备高度的个性化设置能力&#xff0c;允许用户根据自己的喜好调整壁纸效果。智能推荐功能则能帮助用户发现更…

<PhotoShop><JavaScript><脚本>基于JavaScript,利用脚本实现PS软件批量替换图片,并转换为智能对象?

前言 PhotoShop软件支持JavaScript脚本,来扩展软件的功能,官方本身也提供了一些常用脚本,如图像处理等,同时也支持自定义的JavaScript脚本。 环境配置 系统:windows 平台:visual studio code 语言:JavaScript 软件:PhotoShop 2022 版本:23.2.1 概述 本文利用Java…

【Linux】System V - 基于建造者模式的信号量

目录 信号量和P、V原语 信号量集结构体 信号量操作接口 semget semctl semop 封装Sem 关于建造者模式 信号量和P、V原语 信号量和 P、V 原语由 Dijkstra &#xff08;迪杰斯特拉&#xff09;提出 信号量值含义 S>0: S 表⽰可⽤资源的个数 S0: 表⽰⽆可⽤资源&a…

机器学习(11):岭回归Ridge

岭回归是失损函数通过添加所有权重的平方和的乘积(L2)来惩罚模型的复杂度。均方差除以2是因为方便求导&#xff0c;w_j指所有的权重系数, λ指惩罚型系数&#xff0c;又叫正则项力度特点:岭回归不会将权重压缩到零&#xff0c;这意味着所有特征都会保留在模型中&#xff0c;但它…

调整Idea缓存目录,释放C盘空间

本文使用 Idea2024 Idea 会将一些配置默认缓存在C盘&#xff0c;使用久了会占用大量空间&#xff08;本人的Idea占用了将近5个G&#xff0c;以至于不得不进行迁移&#xff09; 缓存目录主要涉及以下四个目录&#xff0c;四个目录可以分为两组&#xff0c;每组目录必须一起调整 …

手搓栅格工具-山体阴影

一、概述 山体阴影工具通过为栅格中的每个像元确定照明度&#xff0c;来获取表面的假定照明度。 通过设置假定光源的位置并计算每个像元相对于相邻像元的照明度值来实现此目的。 它可以显著增强用于分析或图形显示的表面的可视化效果&#xff0c;尤其是在使用透明度时。 默认情…

Censtos docker安装方法

#设置防火墙 systemctl stop firewalld.service setenforce 0 #安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 #yum-utils&#xff1a;提供了 yum-config-manager 工具。 #device mapper&#xff1a; 是Linux内核中支持逻辑卷管理的通用设备映射机制…

单片机51 day46

单片机 一&#xff1a;基础概念 一&#xff1a;单片机最小系统 单片机&#xff1a;电源时钟&#xff08;晶振&#xff09;复位 //实现的最小组件 电源&#xff1a;5V直流 时钟(晶振)&#xff1a;决定系统运行的速率 一般12M&#xff08;不超过50M&#xff09;&#xff0c…

【无标题】解锁未来无线网络的无限可能——Mesh自组网设备

在科技迅猛发展的今天&#xff0c;无线网络已经成为了现代生活不可或缺的一部分。无论是在家庭中娱乐观看视频、在线游戏&#xff0c;还是在企业中进行办公、远程协作&#xff0c;网络的稳定性和覆盖范围都直接影响着我们的使用体验。传统的Wi-Fi网络在面临多设备同时连接或大面…

Libevent(5)之使用教程(4)工具

Libevent(5)之使用教程(4)工具函数 Author: Once Day Date: 2025年8月3日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 本文档翻译于&#xff1a;Fast portable non-blo…

Linux指令(3):

1. cal指令&#xff1a;我们的cal指令有日历的意思看上面&#xff0c;我们输入一个cal指令&#xff0c;可以查看当前月的日历&#xff0c;我们给cal指令后面加上 - 3&#xff0c;他就会显示这个月为中间的三个月的日历&#xff0c;但是-4 不行&#xff0c;-5 也不行。只能 - 3。…

MLS平滑滤波

1.前言 最近在学习&#xff0c;因此查阅相关资料&#xff0c;该怎么表述感觉有些困难 2.代码 2.1代码1 使用全局坐标系 参考&#xff1a;python点云移动最小二乘法(Moving Least Squares)平滑_移动最小二乘法python-CSDN博客 def Moving_Least_Squares_Smoothing_v1_expla…

华为2288H V5服务器闪红灯 无法开机案例

广东某客户1台华为2288H V5服务器&#xff0c;由于单位外围电力维修导致服务器有过一次异常断电。结果来电之后发现服务器无法开机&#xff0c;开机面板上有个红色心跳指示灯&#xff0c; 工程师到客户现场后通过192.168.2.100登陆到2288H V5服务器的BMC管理口&#xff0c;打算…

SRIO入门之官方例程仿真验证

仿真SRIO事务时序仿真之前先完成下面两步操作&#xff1a;1.Vivado软件版本2020.1&#xff0c;创建好工程及SRIO的IP核2.右键综合化的IP核&#xff0c;然后选择打开IP示例工程直接运行仿真分别将request和response两个模块添加到仿真窗口进行查看运行1000us左右就可以看到信号动…

CMake进阶: 使用FetchContent方法基于gTest的C++单元测试

目录 1.前言 2.FetchContent详解 2.1.FetchContent简介 2.2.FetchContent_Declare 2.2.1.简介 2.2.2.关键特性 2.2.3.常见示例 2.3.FetchContent_MakeAvailable 2.3.1.简介 2.3.2.核心功能与工作流程 2.3.3.示例用法 2.3.4.关键特性 2.3.5.常见问题与解决方案 3.…

亚马逊广告投放:如何减少无效曝光提高ROI

“为什么广告花费高但转化率低&#xff1f;”“如何判断关键词是否值得继续投放&#xff1f;”“曝光量暴涨但订单没增加怎么办&#xff1f;”“ACOS居高不下该如何优化&#xff1f;”“手动广告和自动广告的预算怎么分配&#xff1f;”如果你也在为这些问题头疼&#xff0c;说…

Ethereum:拥抱开源,OpenZeppelin 未来的两大基石 Relayers 与 Monitor

不知道大家是否注意到&#xff0c;OpenZeppelin 正在经历一次重大的战略转型。他们决定在 2026 年 7 月 1 日正式关闭其广受好评的 SaaS 平台——Defender&#xff0c;并将重心全面转向开源工具的建设。 这一举动在社区引发了广泛的讨论&#xff0c;也标志着 OpenZeppelin 希望…