技术总结(二十一)

一、Redis是什么

Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。以下是关于 Redis 的详细介绍:

一、数据结构支持

  • 字符串(String)
    • 这是 Redis 最基本的数据类型。可以存储任何形式的字符串,包括整数、浮点数(以字符串形式存储)和二进制数据等。例如,可以用一个字符串类型的键值对来存储用户的登录令牌(token)。
    • 操作命令示例:SET key value用于设置键值对,GET key用于获取指定键的值。
  • 列表(List)
    • 它是一个按照插入顺序排序的字符串元素集合。可以在列表的两端进行插入(LPUSHRPUSH命令)和删除(LPOPRPOP命令)操作。
    • 比如,一个简单的消息队列可以使用 Redis 列表来实现。生产者将消息使用RPUSH命令插入到列表的尾部,消费者使用LPOP命令从列表头部获取消息进行处理。
  • 集合(Set)
    • 集合是一个无序的、不包含重复元素的字符串集合。可以进行添加元素(SADD命令)、删除元素(SREM命令)和检查元素是否存在(SISMEMBER命令)等操作。
    • 例如,在一个社交网络应用中,可以使用集合来存储用户的关注列表。当用户关注另一个用户时,使用SADD命令将被关注用户的 ID 添加到关注列表集合中。
  • 有序集合(Sorted Set)
    • 它和集合类似,但是每个元素都会关联一个分数(score),Redis 会根据这个分数对元素进行排序。可以通过分数范围获取元素(ZRANGEBYSCORE命令)。
    • 例如,在一个游戏排行榜应用中,玩家的得分和玩家 ID 可以组成有序集合,根据玩家得分来实时更新排行榜。
  • 哈希(Hash)
    • 哈希是一个键值对集合。它适合存储对象,其中字段(field)相当于对象的属性,值(value)相当于属性的值。可以通过HSET命令设置哈希中的字段和值,通过HGET命令获取指定字段的值。
    • 例如,存储用户信息(姓名、年龄、性别等),可以将用户 ID 作为键,用户的各项信息作为哈希中的字段和值。

二、主要特点

  • 高性能
    • 由于 Redis 的数据存储在内存中,读写操作速度非常快。相比传统的基于磁盘的数据库,它能够在极短的时间内处理大量的读写请求。这使得 Redis 在对性能要求极高的场景下,如高频交易系统的实时数据存储和查询、大型网站的热点数据缓存等,发挥着重要的作用。
  • 持久化
    • Redis 提供了两种持久化方式来确保数据在重启后不会丢失。一种是 RDB(Redis Database)持久化,它是在指定的时间间隔内将数据集快照写入磁盘。另一种是 AOF(Append Only File)持久化,它以日志的形式记录服务器所接收的每一个写操作,在服务器重启时,这些日志可以被重新执行来恢复数据集。
  • 分布式支持
    • Redis 支持集群模式,能够实现数据的分布式存储和高可用性。在集群模式下,数据被自动分片存储在多个节点上,并且可以通过主从复制等机制来保证数据的冗余和故障恢复。例如,当一个主节点出现故障时,从节点可以快速接管服务,确保系统的连续性。
  • 简单易用的 API
    • Redis 提供了简单直观的命令行接口和丰富的客户端库,支持多种编程语言,如 Python、Java、Node.js 等。这使得开发者可以很方便地在自己熟悉的语言环境中使用 Redis,快速集成到现有的应用系统中。

三、应用场景

  • 缓存应用
    • 这是 Redis 最常见的应用场景之一。通过将经常访问的数据存储在 Redis 中,当客户端再次请求这些数据时,可以直接从 Redis 中获取,而不必从后端的数据库(如 MySQL、MongoDB 等)中读取,大大提高了系统的响应速度。例如,在一个电商网站中,商品的详情信息、热门商品列表等都可以缓存到 Redis 中。
  • 计数器应用
    • 可以利用 Redis 的原子操作来实现计数器功能。比如,统计网站的访问量、文章的点赞数、用户的登录次数等。由于 Redis 的操作是原子性的,在高并发环境下能够保证计数的准确性。
  • 消息队列应用
    • 如前面提到的,Redis 的列表数据结构可以作为一个简单的消息队列。在分布式系统中,不同的服务可以通过 Redis 消息队列进行通信和协作,实现异步处理,提高系统的整体性能和可扩展性。
  • 排行榜应用
    • 利用 Redis 的有序集合可以轻松地实现排行榜功能,如游戏排行榜、电商网站的商品销量排行榜等。可以实时更新排名,并且能够快速地获取排名前列的元素。

二、Redis雪崩

edis雪崩‌是指在某个时间段内,大量的缓存数据同时失效或过期,导致大量的请求直接落到数据库上,从而引起数据库负载激增,影响系统性能的现象。‌12

原因

  1. 缓存数据过期时间设置不合理‌:如果大量的缓存数据在同一时间过期,会导致请求直接打到数据库上。
  2. 缓存服务宕机‌:如果Redis缓存服务宕机,请求无法获取缓存数据,会直接打到数据库上。
  3. 缓存层错误‌:缓存层出现错误,不能正常工作,导致请求直接打到数据库上。

解决方案

  1. 设置合理的缓存过期时间‌:给不同的缓存数据设置不同的过期时间,避免大量数据同时过期。
  2. 缓存预热‌:将数据提前加入到缓存中,当数据发生变更时,再将最新的数据更新到缓存。

三、Redis缓存预热

Redis缓存预热是指系统上线后,提前将相关的缓存数据直接加载到缓存系统中。这样做的主要目的是减少数据库的压力,避免在用户请求时直接查询数据库,从而提高系统的响应速度和性能‌12。

缓存预热的原因和好处
  1. 减少数据库压力‌:通过缓存预热,用户发送请求时不需要再从数据库查询数据,而是直接从Redis缓存中获取,从而减轻数据库的负担,特别是在高并发场景下效果显著‌2。
  2. 提高系统响应速度‌:预加载缓存数据可以避免在用户首次请求时从磁盘读取数据到内存的过程,减少响应时间,提升用户体验‌12。
  3. 避免数据不一致‌:如果Redis启动后没有进行缓存预热,客户端请求会导致Redis从磁盘中读取数据到内存中,如果此时的数据已经过期或者已被删除,就会导致客户端得到的数据不一致‌1。

四、Redis‌缓存穿透

edis缓存穿透‌是指当一个请求查询一个不存在于缓存中的数据时,由于缓存中不存在该数据,每次查询都会直接访问后端数据源,导致后端数据源压力大增,甚至可能导致服务不可用。

Redis缓存穿透的原因

缓存穿透的主要原因有两个:

  1. 查询的数据在数据库中确实不存在‌:当用户查询一个在数据库中也不存在的数据时,缓存和数据库都无法提供数据,导致每次请求都会直接访问数据库。
  2. 恶意请求‌:恶意用户或攻击者通过发送大量的无效查询来绕过缓存,直接访问数据库,导致数据库压力激增。

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

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

相关文章

VS+QT开发 找不到宏$(Qt_INCLUDEPATH_) $(Qt_LIBS_)

问题:在VSQT开发环境,项目右键->属性->C/C->常规->附加包含目录->宏(位置在右下角)->右侧新弹出的属性框内搜索Qt_INCLUDEPATH_ 找不到的场景的解决办法。

STl学习-迭代器

1.迭代器种类 这五种迭代器的声明如下: truct output_iterator_tag {};//输出迭代器 truct input_iterator_tag{ };//输入迭代器 truct forward iterator tag : public input iterator tag {};//向前迭代器 truct bidirectional iterator tag :public forward iter…

亲测在Windows系统安装、使用、定制Ollama服务

一、前言 1.1 Ollama介绍 Ollama是一个专为在本地环境中运行和定制大型语言模型而设计的工具。它提供了一个简单而高效的接口,用于创建、运行和管理这些模型,同时还提供了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。Ollama的目标…

aLoNg3x.2 | CrackMe

cm下载链接: https://n0zom1z0.lanzoup.com/iB4Gz2el88cb 密码:38sy crack目标是让register框去掉。不让patch,所以要真算出Code。 第一个难点: DELPHI。。。窗口文字与处理函数的定义在这种地方: 这个cancel处,只要…

STl学习-函数对象

1.含有状态的函数对象类 函数对象类除了 operator()之外也可以包含其他成员。函数对象类通常含有一些数据成员这些成员被用于定制调用运算符中的操作。举个例子,我们将定义一个打印 string 的类。默认情况下,会将内容写入到cout 中,每个stri…

U-Mail邮件网关有效防止企业邮箱系统被垃圾邮件轰炸

在现代社会,互联网企业为了提供更便捷的服务,常常会收集用户数据,构建自己的大数据资源库。然而,这种行为往往导致用户在不经意间泄露个人隐私,进而引发个人信息的非法交易和频繁的骚扰电话,这些问题已经引…

手把手教你搭建OpenScenario交通场景(上)

OpenScenario是一种专为自动驾驶系统仿真测试设计的场景描述语言,它基于XML格式,旨在提供一个标准化、模块化的框架,用于定义和重现复杂的道路交通场景。该语言不仅能够详细描绘车辆、行人、交通信号及其他动态交通参与者的行为模式&#xff…

专业140+总分430+复旦大学875信号与系统考研经验原957电子信息通信考研,真题,大纲,参考书。

专业140,总430,复旦大学875信号与系统(电子信息)原957经验贴分享,希望大家复习有帮助。 专业课(875信号与系统含随机过程-原957) 专业课这方面我是从7月开始,刚好数学第一遍搞好了大…

NVR小程序接入平台EasyNVR多品牌NVR管理工具/设备介绍

随着数字化浪潮的迅猛推进,视频监控技术在维护公共安全、提升管理效能方面发挥着越来越重要的作用。在众多视频监控平台中,NVR小程序接入平台EasyNVR是一款拓展性强、视频能力灵活且部署轻便的安防视频监控平台。它支持多种主流标准协议,并能…

C语言 | Leetcode 题解之第535题TinyURL的加密与解密

题目: 题解: typedef struct {int key;char *val;UT_hash_handle hh; } HashItem;HashItem *dataBase NULL;char* encode(char* longUrl) {srand(time(0));int key;HashItem * pEntry NULL;while (true) {key rand();pEntry NULL;HASH_FIND_INT(dat…

磁盘分区并挂载

https://blog.csdn.net/qq_45664055/article/details/107516419

投机采样的显性化——OpenAI新feature:Predicted Outputs

关于投机采样speculative decoding我就不特别详细解释了 我在这里简单描述一下 小模型生成了接下来的n个标记,然后在大模型上进行n个并行推理,具体为:Prompt,Prompt ST1,Prompt ST1 ST2 … Prompt ST1 ST2 … …

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

有趣的Midjourney作品赏析(附提示词)

中文提示词:国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词:National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词:粘土模型,男性穿着中世纪欧洲蓝色盔甲&#x…

【保姆级教程】实操 Linux 磁盘管理:硬盘选型 分区挂载

最近,Linux 服务器自带的固态硬盘,空间告警,急需加上一块新的硬盘来救急。 今日分享,系统梳理下 Linux 下挂载磁盘的详细步骤和注意事项,方便日后翻阅,也给有类似需求的小伙伴一点帮助。 1. SSD&#xff…

离线安装nvidia docker2插件

由于网络问题,各位下载nvidia docker插件存在各种各样的问题,往往需要换源,或者其他途径外网解决,为了避免这么麻烦,可选择直接将包下载到本地,使用dpkg本地安装。 离线包下载地址,总共需要下载…

MySQL多表查询

扩展 upsert语法 原始数据 create table stu(id int primary key auto_increment,name varchar(20), #学生姓名gender varchar(10), #学生性别age int #学生姓名 ) default charsetutf8;insert into stu values(null,乔峰, 男 ,28),(null,虚竹, 男 ,25),(n…

让智能体—“正念365”陪你一起“养心”

佛学的“八正道”中,笔者个人观点,“正念”是最适合当代人低门槛练习的一个,因为不需要阅读大量的知识来理解概念,只需要保持对当下的觉察,发现分心了,就不带评价的把注意力拉回到当前的事情上就好。就是佛…

uni-app小程序开发(1)

下载软件就不多赘述了。 直接上代码,写过wep端的vue看这个小程序就简单很多,不需要搞那么多麻烦事情,直接编译器就创建好了基础模版。 1、项目结构 暂时知道这么多,后续再补充 2、页面创建、导航栏设置、基础属性设置 在pages中…

Mac上无法访问usr/local的文件

sudo chmod 755 /usr/loca 最后用百度提供的方法解决了