【Redis】初识Redis

news/2025/1/15 13:20:52/

目录

Redis简介

Redis在内存中存储数据

Redis数据库中的应用 

Redis缓存中的应用

Redis消息中间件 

尾言


Redis简介

如下是Redis官网中,对Redis的一段描述

在这段描述中,我们提取如下关键要点:

  • Redis主要用于在内存中存储数据
  • Redis可以当成缓存使用
  • Redis可以当成数据库使用
  • Redis可以当成消息中间件使用 

基于上述要点,我们接下来初步认识一下Redis


Redis在内存中存储数据

提起这个问题,可能会很奇怪,所谓的在内存中存储数据,难道不可以定义变量吗?定义变量不就是在内存中存储数据吗?

实际上,Redis在内存中存储数据主要应用于分布式系统中

若是单机情况下,我们在语言中通过定义变量的方式是一种更优的选择

回忆一下:我们说进程之间是具有隔离性的,即一个进程想直接访问另一个进程的内存和数据是不可能的,但分布式系统中就一定要求了一个进程能访问另一个进程的内存数据。

为了解决进程的隔离性带来的问题,我们引入了进程间通信的技术

而在当今互联网中,最常用于进程间通信的技术是网络

所以Redis的功能之一就是基于网络实现分布式系统下的进程间通信的技术


Redis数据库中的应用 

Redis可以应用于数据库领域,我们应该知道,数据库如今最广泛使用的是MySQL,那么Redis与他相比有哪些优势,又有哪些劣势呢?


Redis vs MySQL : 优势 

Redis与MySQL相比,最大的优势就是快!

我们都知道MySQL是把数据存储到硬盘上的,而Redis是把数据存储在内存中的,根据冯诺依曼体系结构我们知道,访问内存中的数据一定比访问外设上的数据要快的多!


Redis vs MySQL : 劣势 

在当今的互联网公司中,虽然有很大一部分对于访问数据的效率要求比较高,但更大一部分的互联网公司对数据访问要求没那么高,Redis把数据存储到内存的方式,虽然提高了访问效率,但同时也带来了内存存储的另一个弊端:存储空间大小有限

对于同样多的一组数据,存储到内存上所需要的成本肯定是比存储到硬盘中要大的。这会导致成本的提高

总的来说若对于数据访问效率没有那么高,并且想控制成本,可以使用MySQL,但若对于数据访问效率有较高的要求,那么就要用到Redis了


Redis缓存中的应用

在上述Redis作为数据库中我们了解到,若需要访问效率较高, 使用Redis。但带来的是存储成本的增加。

有没有一种方案是既可以节省成本(内存空间),又可以提高访问效率的呢?

这就不得不提到计算机中的二八原则!

二八原则:在当今互联网中,百分之20的热点数据,已经可以满足用户百分之80的使用需求了

我们依据这个原则,可以把百分之20的热点数据存储到内存中,剩余的存量数据存储到硬盘中即可,需要的时候再拿

这样就会使得我们设计出来的系统即拥有较高的访问速度,需要的内存空间是较少的。

在这种方案中,Redis就是作为一个缓存的角色存在

但与此同时,这种设计方案也带来了如下问题:

  • 系统的复杂程度大大提升了
  • 如果数据发生修改,还涉及到Redis和MySQL之间的数据同步问题

Redis消息中间件 

Redis作为消息中间件(消息队列)是Redis被制造出来的初心,但后来由于经过大量实践,发现Redis作为缓存/数据库的使用会比作为消息中间件更有用

消息中间件:分布式系统下的生产者消费者模型

一般我们不会使用Redis作为消息中间件,因为业界有着比Redis更优秀的消息中间件使用!


尾言

通过上述的介绍,我们初步了解了Redis与它的使用场景,可以发现,在上述介绍中充斥着大量的分布式系统概念,所以下一期我们一起来了解一下什么是分布式! 


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

相关文章

解决winodws server iis 下的php mkdir(): Permission denied 问题

这个问题报错原因是权限不够,解决办法如下: 1.在php安装目录下,打开配置文件php.ini 把upload_tmp_dir 前面的分号去掉。 2.给上传的文件夹添加权限 在网站的相应目录,比如目录为tmp,添加IUSR用户,并给所…

软件测试 —— Selenium常用函数

软件测试 —— Selenium常用函数 操作测试对象点击/提交对象 click()模拟按键输入 send_keys("")清除文本内容 clear() 模拟用户键盘行为 Keys包示例用法 获取文本信息 textget_attribute("属性名称") 获取当前页面标题 title获取当前页面的 url current_u…

【深度学习】神经网络灾难性遗忘(Catastrophic Forgetting,CF)问题

文章目录 1. 什么是灾难性遗忘?2. 为什么会存在灾难性遗忘?2.1 网络权重的更新2.2 没有有效的记忆机制2.3 任务间数据分布差异 3. 目前解决方案3.1 弹性权重保持(Elastic Weight Consolidation, EWC)3.2 其他方法 1. 什么是灾难性…

JavaRestClient 客户端初始化+索引库操作

1. 介绍 ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。 Elasticsearch目前最新版本是8.0,其java客户端有很大变化。不过大多数企业使用的还是8以下版本 2. 客户端初始化 在elastic…

Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250114

逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/18YtQiLnt06cPQP1nRXor0g?pwd4k3h 提取码: 4k3h Level2逐笔成交逐笔委托数据分享下载 基于Level2的逐笔成交和逐笔委托数据,这种毫秒级别的记录能分析出许多关键信息,如庄家意图、虚假动作&#…

day01-HTML-CSS——基础标签样式表格标签表单标签

目录 此篇为简写笔记下端1-3为之前笔记(强迫症、保证文章连续性)完整版笔记代码模仿新浪新闻首页完成审核不通过发不出去HTMLCSS1 HTML1.1 介绍1.1.1 WebStrom中基本配置 1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签1.3.4 换行标…

uniapp页面高度设置(铺满可视区域、顶部状态栏高度、底部导航栏高度)

这里说几种在uniapp开发中,关于页面设置高度的几种情况。宽度就不说了哈,宽度设置百分比都会生效。 首先我们要知道平时开发中,如果说没在uniapp做特殊处理,即正常情况下,所有的页面(.vue文件)中都是没有高度的(和vue一样),也就是说给最外层的的view标签设置高度为1…

cmake 编译ffmpeg的Android 的 so文件的cmake内容

确保你的开发环境已经设置好,包括安卓NDK和相应版本的FFmpeg源码。 下载并配置FFmpeg源码。 git clone https://git.ffmpeg.org/ffmpeg.gitcd ffmpeg 使用NDK-build或者cmake来编译FFmpeg。 5. 在ffmpeg路径下,新建build.sh , 下载MYSYS&#xff0c…