速度与激情:Redis如何以核心数据结构驱动极致性能

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达!

引言

Redis是一个开源的内存数据结构存储系统,它支持多种类型的数据结构,如字符串、散列、列表、集合、有序集合等。Redis以其出色的性能和低延迟特性而闻名,这主要得益于其核心数据结构的设计和实现,以及其高性能的存储和访问机制。

核心数据结构

Redis的数据结构设计非常灵活,它不仅支持基本的数据类型,还支持复杂的数据类型,并且提供了丰富的操作命令。

字符串(String)

字符串是Redis中最基本的数据结构,它允许用户将字符串值设置、获取、删除等。

使用场景:

  • 缓存数据(如HTML页面、JSON序列化的对象)
SET  key  value 			//存入字符串键值对
MSET  key  value [key value ...] 	//批量存储字符串键值对
SETNX  key  value 		//存入一个不存在的字符串键值对
GET  key 			//获取一个字符串键值
MGET  key  [key ...]	 	//批量获取字符串键值
DEL  key  [key ...] 		//删除一个键
EXPIRE  key  seconds 		//设置一个键的过期时间(秒)
  • 计数器(如微博点赞数、视频播放次数)
INCR  key 			//将key中储存的数字值加1
DECR  key 			//将key中储存的数字值减1
INCRBY  key  increment 		//将key所储存的值加上increment
DECRBY  key  decrement 	//将key所储存的值减去decrement
  • 分布式锁
SETNX  product:10001  true 		//返回1代表获取锁成功
SETNX  product:10001  true 		//返回0代表获取锁失败
DEL  product:10001			//执行完业务释放锁
SET product:10001 true  ex  10  nx	//防止程序意外终止导致死锁

优点:

  • 简单易用
  • 可以用于简单的缓存和计数场景

缺点:

  • 不适合存储复杂的数据结构

哈希(Hash)

集合是一个无序集合,它通过哈希表实现,具有快速添加、删除和查找操作的特点。

使用场景:

  • 存储用户信息
  • 记录对象属性(用户信息)
  • 缓存关系型数据库的行数据
HMSET  user  1:name  zhangsan  1:age  18
HMSET  user  2:name  lisi      1:age  19
HMGET  user  1:name  1:age  

命令执行结果:

idnameage
1zhangsan18
2lisi19

优点:

  • 可以存储复杂的数据结构
  • 访问和更新效率高
  • 同类数据归类整合储存,方便数据管理

缺点:

  • 不适合存储大量数据,因为所有数据都在一个键下
  • 过期功能不能使用在field上,只能用在key上
  • Redis集群架构下不适合大规模使用

列表(List)

列表是简单的字符串链表,支持从两端插入和删除元素,常用于消息队列等场景。

使用场景:

  • 消息队列
Blocking MQ(阻塞队列)= LPUSH + BRPOP
Queue(队列)= LPUSH + RPOP# 从列表左侧插入元素
LPUSH tasks "process_video"
# 从列表右侧弹出元素
BPOP tasks
  • 朋友圈时间线
LPUSH message:{用户id} 1
LPUSH message:{用户id} 2
LPUSH message:{用户id} 3
LPUSH message:{用户id} 4LRANGE message:{用户id} 0 3

优点:

  • 支持双向操作(从头部或尾部添加/移除元素)
  • 可以用作队列或栈

缺点:

  • 元素数量较多时,访问中间元素较慢
  • 列表尾部添加和移除操作很快,但头部操作较慢

集合(Set)

集合是一个无序集合,它通过哈希表实现,具有快速添加、删除和查找操作的特点。

使用场景:

  • 微信微博点赞/收藏
1) 点赞
SADD  like:{消息ID}  {用户ID}
2) 取消点赞
SREM like:{消息ID}  {用户ID}
3) 检查用户是否点过赞
SISMEMBER  like:{消息ID}  {用户ID}
4) 获取点赞的用户列表
SMEMBERS like:{消息ID}
5) 获取点赞用户数 
SCARD like:{消息ID}
  • 好友关系(共同关注)

SINTER set1 set2 set3  { c }
SUNION set1 set2 set3  { a,b,c,d,e }
SDIFF set1 set2 set3  { a }
  • 抽奖活动(随机选取中奖者)
1)点击参与抽奖加入集合
SADD key {userlD}
2)查看参与抽奖所有用户
SMEMBERS key	  
3)抽取count名中奖者
SRANDMEMBER key [count] / SPOP key [count]

优点:

  • 元素唯一,不会重复
  • 支持集合间的操作,如并集、交集

缺点:

  • 不支持排序
  • 不能直接获取集合中的元素

有序集合(Sorted Set)

有序集合是将集合和散列表结合起来,给每个元素设置一个分数,然后根据分数进行排序。

使用场景:

  • 排行榜系统
//展示当日排行前十
ZREVRANGE  hotNews:20190819  0  9  WITHSCORES 

高性能原理

  1. Redis 为什么快?

因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。

  1. Redis线程形式

Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。
Redis有也有多线程的功能,比如持久化、异步删除、集群数据同步等

  1. redis支持高并发

Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。

结语

Redis之所以能够提供高性能的数据存储和访问,主要得益于其内存存储、单线程模型、高效的数据结构设计以及持久化机制等。了解Redis的核心数据结构和高性能原理,对于我们更好地使用Redis、优化应用性能具有重要意义。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

全网最简单的Mysql 8.3 安装及环境配置教程

Windows系统计算机环境配置 第一篇关于环境配置的文档之MySQL 8.3(msi版本和zip版本略有不同,本文档介绍msi版本,若zip版本有需求,请在评论区留言,我后续会出相关文档。) 前言 网上的MySQL配置教程非常多…

电脑常用的PDF阅读器-嗨动PDF编辑器!带你详细了解它

电脑常用的PDF阅读器-嗨动PDF编辑器!在数字化信息爆炸的时代,PDF格式的文件因其易于打印和保留原始格式等优点,成为了人们日常工作和学习的常用格式。而对于PDF文件的处理,一款功能强大、操作简便的PDF阅读器是必不可少的。今天&a…

合并K个升序链表

题目 解法一 优先级队列 思想 将每个链表中的一个节点存放到优先级队列中,本题采用小根堆,将小根堆中的根节点取出,插入到最终的链表中,并且将该节点在原链表中的下一个节点插入小根堆中(需要向下调整)&a…

【练习】分治--快排思想

🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 颜色分类 题目描述 题解 代码实现 排序数组 题目描述 题解 代码…

华为正式放弃高通芯片 | 百能云芯

5月15日,据外媒最新报道,高通公司正式确认,华为已无需依赖其处理器供应。 在出口许可被正式吊销前,高通的首席财务官已公开表示,预计明年与华为之间的芯片销售将为零,因为华为决定不再从高通购买4G芯片。 报…

策略模式详解

策略模式 1 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进…

信创改造2---java集成TongLink/Q

上一篇针对TongLINK/Q的安装部署 http://t.csdnimg.cn/9ss7l ,这篇具体说明java集成 1. 准备工作 根据实际修改连接URL等信息 vim TLQ8/etc/tlqjndi.conf 2. JAVA集成 将TongJMS.jar加载到自己的项目中 发送消息 package com.keyou.proj.authentication.service.utils;…

C++11 新特性 常量表达式 constexpr

为了解决常量无法确定的问题,C11在新标准中提出了关键字constexpr,它能够有效地定义常量表达式,并且达到类型安全、可移植、方便库和嵌入式系统开发的目的。 一、常量的不确定性 在C11标准以前,我们没有一种方法能够有效地要求一…

ModuleNotFoundError: No module named ‘openpyxl‘的解决方案

问题描述: ModuleNotFoundError: No module named ‘openpyxl’ 这个错误表示你的 Python 环境中没有安装 openpyxl 这个模块。openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。 解决方案: 要解决这个问题,你需…

Java后端面试常见问题

Java后端面试 经历了两个月的面试和准备,下面对常见的八股文进行总结。有些问题是网上看到的面经里提到的,有些是我真实面试过程遇到的。 异常 1、异常分为哪几种?他们的父类是什么? 注意:所有异常对象的父类为Thr…

做简单易用的GIS资源管理软件

在室外资源管理领域,采用基于GIS的解决方案已成为主流趋势,旨在实现资源的高效利用和管理。GIS技术结合资源对象的规划、定位和监控,为企业提供全面的管理方案,从而优化资源使用、提高运营效率和降低成本。 然而,许多资…

OpenAI新模型GPT-4o“炸裂登场” 响应速度堪比真人 关键还免费!

GPT-4o模型基于来自互联网的大量数据进行训练,更擅长处理文本和音频,并且支持50种语言。更值得一提的是,GPT-4o最快可以在232毫秒的时间内响应音频输入,几乎达到了人类的响应水平。 GPT-4o有多“炸裂”?核心能力有三 G…

网工内推 | 测试工程师,NA认证以上,15薪,补充医疗险

01 天视通 招聘岗位:测试工程师 职责描述:1、网络视频监控相关软件产品测试,及行测试记录和相应各种文档资料/手册编写;2、负责编写测试计划、测试用例、搭建测试环境、执行测试;3、进行BUG验证根据测试结果&#xff…

光伏行业该如何起步?

随着全球对可再生能源的需求日益增长,光伏行业作为其中的佼佼者,正迎来前所未有的发展机遇。然而,对于新进入者或希望在这一领域有所建树的企业来说,如何起步并稳健发展是一个值得深思的问题。以下是一些关于光伏行业起步的建议。…

新手也能看懂的前端单元测试框架:Vitest

单元测试的概念及作用 1.什么是单元测试? 单元测试是测试中的一个重要环节,它针对软件中的最小可测试单元进行验证,通常是指对代码中的单个函数、方法或模块进行测试。 单元测试旨在确定特定部分代码的行为是否符合预期,通过针…

中青杯全国大学生数学建模竞赛纳入多所高校学科竞赛认定目录

2024年第六届中青杯全国大学生数学建模竞赛将于2024年5月23日17:00至5月26日17:00举行,中青杯全国大学生数学建模竞赛是中国高校学科竞赛中规模较大、影响较广的学科竞赛之一,并且纳入多所高校学科竞赛认定目录。 报名截止时间:2024年5月23日12:00 报名网站:http://www.c…

FPGA - GTX收发器-K码 以及 IBERT IP核使用

一,前言 在FPGA - Xilinx系列高速收发器---GTX中详细介绍了GTX的基础知识,以及IP核的调用,下面将补充一下GTX在使用中的高速串行数据流在接收和发送时的控制与对齐(K码),以及高速接口GTX,如果G…

深度解析 Spring 源码:解密AOP切点和通知的实现机制

文章目录 深度解析 Spring 源码:解密AOP切点和通知的实现机制一、Spring AOP的基础知识1.1 AOP的核心概念:切点、通知、切面等1.2 Spring AOP与传统AOP的区别和优势 二、深入分析切点和通知的实现2.1 研究 Pointcut 接口及其实现类2.1.1 Pointcut 接口2.…

Towards Novel Class Discovery: A Study in Novel Skin Lesions Clustering

文章目录 Towards Novel Class Discovery: A Study in Novel Skin Lesions Clustering摘要方法实验结果 Towards Novel Class Discovery: A Study in Novel Skin Lesions Clustering 摘要 在识别皮肤疾病的皮肤镜图像方面,现有的深度学习模型表现出了令人期待的性…

石碑之谜:滚动机关

描述 在蒙德和璃月的边界地带,有一个被遗忘的神庙,里面有一个奇怪的机关:滚动石碑。小熊必须操作这个112的长方体石碑,使其通过不同的地面环境,最终放置到神秘的符号“O”上,以解开通往宝藏的大门。 石碑…