Redis特性与应用场景

Redis是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,在分布式系统中能够发挥重要作用。

Redis的特性

1.In-memory data structures:


MySQL使用表的方式存储数据,这意味着数据通常存储在硬盘上,并且在需要时加载到内存中进行处理。而Redis则是将数据存储在内存中,这使得Redis能够提供非常高的读写性能,适用于对性能要求较高的场景。


2.Programmability:

Redis具有丰富的命令集,可以通过交互式命令行或脚本语言(如Lua)进行操作。这使得开发人员可以方便地进行数据操作和逻辑处理,而不需要编写复杂的SQL语句。


3.Extensibility:

Redis提供了一组API,可以通过编写C、C++、Rust等语言的扩展来扩展其功能。这意味着开发人员可以根据自己的需求添加自定义功能或优化现有功能。


4.Persistence:

尽管Redis主要将数据存储在内存中以提供高性能,但它也提供了持久化的机制,可以将数据定期写入硬盘中,以防止数据丢失。这可以通过快照(snapshot)持久化和日志(append-only log)持久化两种方式来实现。

5.Clustering:

Redis支持集群部署,可以通过将多个Redis节点组成一个集群来扩展数据存储和处理能力。集群中的不同节点负责存储和处理不同的数据片段,并通过内部通信协议进行数据同步和负载均衡。


6. High availability:

为了实现高可用性,Redis支持主从复制(master-slave replication)机制。在主从复制中,一个主节点负责处理客户端请求,并将数据复制到一个或多个从节点,从节点则用作主节点的备份。当主节点发生故障时,可以通过将一个从节点提升为新的主节点来实现故障转移,从而保证系统的可用性。

Redis快的原因:

1.Redis将数据存储在内存中,这使得它比基于硬盘的数据库快得多。通过将数据保留在内存中,Redis避免了从硬盘读取数据所带来的延迟。

2.Redis的核心功能主要围绕着对内存中数据结构的简单和高效操作展开。相比于复杂的关系型数据库,Redis提供了一组简单而强大的命令,可以直接操作数据结构,例如字符串、哈希表、列表、集合和有序集合等。


3.从网络的角度来看,Redis采用了I0多路复用的模型(如epol),它使用单个线程来管理多个套接字连接。这种设计使得Redis能够高效地处理并发连接请求,提高了网络通信的性能。


4.Redis采用单线程模型,这减少了不必要的线程间竞争开销。由于Redis的核心任务是操作内存中的数据结构,它并不消耗大量的CPU资源。多线程适用于CPU密集型任务,而Redis的单线程模型更适合处理高并发的读写操作。

Redis主要的应用场景

1.实时数据的存储

这里的Redis被当作数据库使用。

大多数情况下,考虑到数据存储都是优先选择存储量大的。

但在某些情况下,需要考虑数据存储的速度。

eg:做搜索引擎开发时,比如商业搜索,对性能的要求是很高的,所以搜索系统当中是没有使用到MySQL这样的数据库。所以我们会把所有检索的数据存放到内存当中,就是用的是类似Redis这样的内存数据库。

2.缓存与会话存储

大多数情况下,每一个系统都有热点数据与冷点数据,我们可以将热点数据存放在速度较快的Redis当中,将大量的冷点数据存放在存储量更大的MySQL当中。

会话存储:

cookie => 实现用户身份信息的保存,需要session的配合。

cookie只是在浏览器这边存储了一个用户的身份标识---sessionId

session在服务器这里真正的存储了用户数据。

问题小场景

现在出现了一点小问题:

如上,如果每次客户端发送了请求,都会需要经过负载均衡器,那都需要登录一次,显然这个是个问题。

解决方式:

1).想办法让负载均衡器,把同一个用户的请求都输送到同一个应用服务器上(不能够轮询,而是需要通过userId之类的方式来分配机器)

2).把会话数据单独拿出来,放到一组独立的机器上存储(Redis)

PS:这里有个好处,应用服务器重启了,会话数据是不会丢失的。

3.消息队列(服务器)

PS:此处说的消息队列不是Linux进程间通信的消息队列

基于此,可以实现一个网络版本的 生产者/消费者 模型。 对于分布式系统中的服务器与服务器之间,也会用到该模型。

该模型的优势:解耦合,削峰填谷

PS:对比1,2两点,第一点中,Redis存放的是全量数据,这里的数据是不可以随便丢的。

第二点中,Redis存放的是部分数据,全量数据都是以MySQL为主的,哪怕Redis的数据没了,还可以从MySQL当中加载回去。

Redis不能做的事情:

存储大规模数据!!!

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

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

相关文章

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客:JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

IM6ULL学习总结(四-七-1)输入系统应用编程

第7章 输入系统应用编程 7.1 什么是输入系统 ⚫ 先来了解什么是输入设备? 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。 ⚫ 什么是输入系统? 输入设备种类繁多,能否统一它们的…

网络触手获取天气数据存入mysql 项目

首先这个案例不一定能直接拿来用,虽然我觉得可以但是里面肯定有一些我没考虑到的地方。 有问题评论或者私信我: 这个案例适合我这种学生小白 获取天气数据网址: https://lishi.tianqi.com/xianyang/202201.html 网络触手获取天气数据代码直…

指针篇章-(冒泡排序详解)

冒泡排序 图解 tmp图解 内容图解 每次循环的次数减少 for循环详解 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列, 一次比较两个元素,如果它们的顺序错误就把它们交换过来。 遍历数列的工作是重复地进行直到没有再需要交换&…

考研复习C语言初阶(4)+标记和BFS展开的扫雷游戏

目录 1. 一维数组的创建和初始化。 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 冒泡…

git学习(创建项目提交代码)

操作步骤如下 git init //初始化git remote add origin https://gitee.com/aydvvs.git //建立连接git remote -v //查看git add . //添加到暂存区git push 返送到暂存区git status // 查看提交代码git commit -m初次提交git push -u origin "master"//提交远程分支 …

图像处理与图像分析—图像的读入(C语言)

学习将会依据教材图像处理与图像分析基础(C/C)版内容展开 什么是数字图像处理 一副图像可以定义为一个二维函数 f(x,y) ,其中 x 和 y 是空间(平面)坐标,任意一对空间坐标 (x,y) 处的幅度值 &am…

springcloud第3季 项目工程搭建与需求说明1

一 需求说明 1.1 实现结构图 订单接口调用支付接口 二 工程搭建 2.1 搭建工程步骤

Linux文件和文件夹操作

前言: 相较于前面背诵的诸多内容,可能现在的部分就需要多多的练习了,难度也慢慢提升。 那就大家一起慢慢努力吧!!!!! 目录 一、Linux目录结构 (一)Window…

ReactNative项目构建分析与思考之react-native-gradle-plugin

前一段时间由于业务需要,接触了下React Native相关的知识,以一个Android开发者的视角,对React Native 项目组织和构建流程有了一些粗浅的认识,同时也对RN混合开发项目如何搭建又了一点小小的思考。 RN环境搭建 RN文档提供了两种…

C语言编译成库文件的要求

keil编译成库文件 在Keil中,将C语言源文件编译成库文件通常需要进行以下步骤: 创建一个新的Keil项目,并将所需的C语言源文件添加到该项目中。 在项目设置中配置编译选项,确保生成的目标文件符合库文件的标准格式。 编译项目&…

JavaWeb基础入门——(二)MySQL数据库基础(3-数据表中的关联关系)

六、数据表中的关联关系 6.1 关联关系介绍 MySQL是一个关系型数据库,不仅可以存储数据,还可以维护数据与数据之间的关系——通过在数据表中添加字段建立外键约束 数据与数据之间的关联关系分为四种: 一对一关联 一对多关联 多对一关联 多…