Redis -- 背景知识

news/2025/2/19 17:07:59/

目录

特性

为啥Redis快?

应用场景

Redis不能做什么?


  Redis是在内存中存储数据的一个中间件,用作为数据库,也可以用作为缓存,在分布式中有很高的威望。

特性

  • In-memory data structures:在内存中存储数据
  • key-value model:使用键值对的存储方式,是一种非关系型数据库(相较于MySQL等数据库以表的形式
  • Programmability:针对redis的操作,可以直接通过简单的交互式命令进行操作,也可以使用脚本的方式,批量进行操作
  • Extensibliity:可拓展性,可以在redis原有的基础上再进行扩展,可以通过c,c++等语言编写Redis扩展
  • Presistence:数据持久化,将数据保存在内存中以便更快速的访问,但是内存中的数据是易失的,redis会将数据存储在硬盘上,内存为主硬盘为辅,redis会将数据备份在硬盘中方便在异常状况后恢复数据
  • Clustering:水平扩展,类似于分库分表。一个 Redis 能存储的数据是有限的 (内存空间有限) 引入多个主机,部署多个 Redis 节点每个 Redis 存储数据的一部分
  • High availability:高可用,Redis自身也是支持主从结构,从节点就相当于主节点的备份。

为啥Redis快?

  •  Redis数据存储在内存中,访问速度比硬盘快
  • Redis核心功能都是比较简单的逻辑
  • 从网络角度,Redis使用的io多路复用(使用一个线程管理多个socket
  • Redis是使用的单线程模型,减少了线程之间不必要的竞争开销

应用场景

  • 键值对数据库:实时性更高,速度要求更快的场景
  • 使用Redis存储热点数据
  • 会话存储
  • 实现网络版本的消息队列(生产者消费者模型

Redis不能做什么?

        实际上和任何一门技术一样,每个技术都有自己的应用场景和边界,也就是说 Redis 并不是万金油,有很多合适它解决的问题,但是也有很多不合适它解决的问题。我们可以站在数据规模和数据冷热的角度来进行分析。
        站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们知道 Redis 的数据是存放在内存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使用 Redis 来存储的话,基本上是个无底洞,经济成本相当高。
        站在数据冷热的角度,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据,例如对于视频网站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,而用户的观看记录不一定是经常需要访问的数据,这里暂且不讨论两者数据规模的差异,单纯站在数据冷热的角度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在 Redis 上,基本上是对于内存的一种浪费,但是对于一些热数据可以放在 Redis 中加速读写,也可以减轻后端存储的负载,可以说是事半功倍


http://www.ppmy.cn/news/1336040.html

相关文章

PMP五大过程组:项目成功的金钥匙

在项目管理领域,PMP(项目管理专业)一直被视为权威的标准。PMP认证的项目管理方法论,即五大过程组和十大知识领域,为项目管理提供了一套完整、系统的方法论。五大过程组作为PMP的核心,涵盖了项目从开始到结束…

C++ STL中list迭代器的实现

list 的模拟实现中,重难点在于迭代器功能的实现,因此本文只围绕 iterator 及 const_iterator 的设计进行介绍,其余如增删查改则不再赘述——在C语言的基础上,这些都非常简单。 与 string / vector 不同,list 的节点原生…

flink-cdc实战之oracle问题记录01

记录问题,温暖你我,上台 欢迎点赞留言关注 2024-01-26 11:02:56,168 ERROR Oracle|oracle_logminer|streaming Mining session stopped due to the {} [io.debezium.connector.oracle.logminer.LogMinerHelper] io.debezium.DebeziumException: Sup…

python sklearn labelencoder、OneHotEncoder和get_dummies的区别

文章目录 labelencoderOneHotEncoderget_dummiesLabelBinarizer labelencoder LabelEncoder 将不连续的数字or文本进行编号 import numpy as np import pandas as pd data pd.DataFrame({"学号":[1001,1002,1003,1004],"性别":["男","女…

初学者必会的100个Python编程代码,入门全套资料都给朋友们整理好了,文末免费领!

我记得刚开始接触编程的时候,觉得太难了。 也很好奇,写代码的那些人也太厉害了吧?全是英文的,他们的英文水平一定很好吧? 他们是怎么记住这么多代码格式的?而且错了一个标点符号,整个程序都会…

第二章、动态规划算法(2.6.5-2.6.5.4)------单序列问题(4)

目录 2.6.5最长回文子序列问题 2.6.5.1问题 2.6.5.2确定动态规则(DP、状态转移方程)、初始值 (1)直接相关状态 (2)当前状态值的确定 (3)动态规则(DP、状态转移方程) 2.6.5.3确定初始值 2.6.5.4动态规划算法代码实现 (1)按length、i循环动态规划求解 (2)按i、j循环动态规划求解 …

如何使用Python Flask搭建一个web页面并实现远程访问

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务,本期教程…

JVM系列——对象管理

JVM对象分布 对象头 第一类是用于存储对象自身的运行时数据,如哈希码(HashCode)、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等 另外一部分是类型指针,即对象指向它的类型元数据的指针,Java 虚…