Redis:初识Redis
Redis:初识Redis
- Redis 介绍
- 分布式架构
- Redis特性
- 安装Redis
Redis 介绍
在官网中,是如下介绍Redis
的:
in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker.
in-memory data store
:在内存中存储数据
这就有点疑问了,为什么要在内存中存储数据?直接定义一个变量不就是在内存中存储数据吗?
是的,在单主机单进程的程序中,只需要通过变量就可以存储数据,供整个进程使用。但是在分布式系统中,多台计算机同时工作,此时一个变量就无法完成多个计算机之间的数据传递了。因为进程之间具有隔离性,最常见的进程间通信方式,是通过网络。而Redis
就是基于网络,将内存中的数据给别的计算机上的进程使用的组件!
后续还提到,Redis
还可以作为数据库使用,现在市面上的数据库很多,比如MySQL
,postgreSQL
等等。但是Redis
与它们不一样,这些数据库都在硬盘中存储数据,读写的速度很慢,而Redis
在内存中读写,速度非常高。
既然这样了,为什么Redis
没有完全取代这些数据库?因为内存是非常贵的,因此Redis
的存储空间并不大,不能存储大量数据。
最常见的情况下,其实Redis
是配合其他数据库使用的,比如用MySQL
作为数据库,用Redis
做缓存。将访问频率最高的数据放到Redis
中,每次用户访问时先查找Redis
,如果没找到再去MySQL
找。
分布式架构
想让Redis
发挥出自身优势,就离不开分布式三个字,接下来介绍一下什么是分布式。
- 单机架构
对于一些简单的服务端应用,在服务器上一般都会运行一个服务端进程,使用数据库存储数据。服务进程通过网络接收用户的请求,进行业务处理,并对数据库进行读写。
但是如果用户人数多起来了,那么一台主机就无法应付,比如内存、网络、硬盘、CPU等资源都可能不足,一台主机的能力有限,此时就有两种解决思路:
- 对软件进行优化,提高软件的效率
- 引入更多的服务器,让多个服务器共同完成一个服务
一旦引入了多台服务器完成一个服务,那么整个系统就称为一个分布式系统了。要注意的是,并不是直接再买一台服务器就可以解决问题的,还要考虑如何部署服务,多个主机上的服务如何完成数据的同步等等复杂的问题,最后问题又回归到了软件层面。
- 应用数据分离架构
当有了多台主机,为了提高服务器的效率,会让一个服务器尽可能只干一种活,此时就把应用服务和数据库分离开,服务器只专门负责其中一个任务。
- 应用服务集群架构
当业务量再大起来,就要由多台服务器来处理业务逻辑,此时多个服务器共同完成一个任务,称为一个集群
。这种架构叫做应用服务集群架构。那么当用户向服务器发起请求,到底要发往哪一台主机?也就是说此时需要有一个进程来决策用户的请求给哪一个应用服务完成,此时就引入了负载均衡
,保证每个应用服务承担差不多的任务。
- 读写分离架构
当应用服务多了起来,那么整个服务要存储的数据也就多了,此时数据库系统不可能只用一台服务器处理,所以就要用多个服务器来共同完成数据存储。
之前说过,尽可能让一个服务器完成相同的任务,而数据库的任务无非就是读取与写入,此时把读写分开,就称为读写分离架构
。一个服务器负责写入数据库,另一个数据库负责读取数据,此时被写入的数据库还要实时进行数据同步,将数据传给被读的数据库。
对于多个数据库的情况,往往会选出一个头儿,称为主数据库
,其余数据库称为从数据库
,这种架构称为主从架构
。
- 冷热分离架构
在实际上,数据库中的数据只少量被访问,计算机界常说二八原则
,即20%
的数据可以处理80%
的访问量。那么就可以把这小部分数据拿到缓存中,以更快的速度访问到。
此时读取数据的逻辑就是,先读取缓存中的数据,如果缓存中有那么直接返回,如果缓存没有,再去数据库查找。而此处的缓存
,就是Redis
的应用场景之一。
- 分库架构
当业务再庞大些,就可能出现一个数据库的表就存不下一张表了,此时就要对表进行再拆分,一个数据库只存一个表,根据具体的种类去查询某一个数据库。此处每个表都用一个数据库集群来存储,遵顼之前的主从,读写分离架构。
- 微服务架构
当应用服务再复杂些,此时业务逻辑就很难维护,此时就可以把整个服务拆分为多个服务。每个服务只负责一个模块的业务开发,一个个小的服务称为微服务
,一群微服务共同完成一个大服务,这种架构称为微服务架构
。
Redis特性
市面上有很多NoSQL
类型的数据库,而Redis
可以脱颖而出,这离不开它的很多特性。
- 速度快
Redis
在内存中存储数据,访问效率非常高,官方给出的读写性能可以达到10 w/s
。另外的,Redis
使用单线程处理数据,避免了多线程的竞争问题。
- 使用非关系型数据库
Redis
使用键值对来存储数据,这与常规的数据库不同,比如MySQL
使用表来存储数据,这称为关系型数据库
,而使用键值对的形式称为非关系型数据库
。
其内部提供了大量的数据结构,比如哈希,字符串,集合等等。
- 支持脚本
Redis
支持使用编程语言Lua
处理一些逻辑,甚至通过Lua
自定义命令。
- 简单稳定
Redis
的源码非常少,在3.0
版本加入集群后,也就5w
行,相比于其它数据库,这算很少的了。而且Redis
的代码非常优雅,普通的开发人员也可以搞懂Redis
的运行机制。
- 可拓展性高
如果不满足于Redis
原生支持的几大数据类型,程序员甚至可以自己写一个数据结构在Redis
使用。
- 持久化
Redis
也不完全只能在内存中存储数据,也可以通过RDB
或者AOF
方式将数据存储到硬盘中。
如果计算机崩溃,此时内存的数据全都会丢失,这对Redis
非常不利,因此会把数据放到硬盘中进行备份。
安装Redis
本博客以Redis 5
为版本讲解,在Linux
服务器上,一般直接下载就可以获取redis 5
Ubuntu
:
sudo apt install -y redis
安装完成后,服务会自动启动,此时通过netstat
查看:
可以发现,Redis
的默认IP是127.0.0.1:6379
,也就是只能本地访问,所以还要修改一下配置文件,让其可以接收外部的网络请求。
Redis
的配置文件在/etc/redis/redis.conf
内,在文件中可以看到bind
和protected-mode
,如下:
bind 127.0.0.1 -::1
protected-mode yes
第二个参数是1保护模式,这个直接关掉就好。
修改IP地址:
bind 0.0.0.0 -::1
protected-mode no
最后重启服务:
service redis-server restart
此时可以通过redis-cli
命令进入Redis
客户端:
如果进入客户端后,输入ping
返回一个PONG
,那么就算安装成功了。
相关文章:

Redis:初识Redis
Redis:初识Redis Redis 介绍分布式架构Redis特性安装Redis Redis 介绍 在官网中,是如下介绍Redis的: in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and messag…...
【React】增量传输与渲染
增量传输 增量传输是一种高效的文件传输方式,其核心原理在于只传输文件中发生变化的部分,而不是整个文件。以下是增量传输的详细解析: 定义与原理: 增量传输通过比对原始文件和目标文件,找出两者之间的差异部分&#…...

【回眸】Tessy 单元测试软件使用指南(四)常见报错及解决方案与批量初始化的经验
前言 分析时Tessy的报错 1.fatal error: Tricore/Compilers/Compilers.h: No such file or directory 2.error: #error "Compiler unsupported" 3.warning: invalid suffix on literal;C11 requires a space between literal and string macro 4.error: unknown…...
2024 - 10 :生物药学: 如何获取对应核心靶点基因的激酶
如何获取对应核心靶点基因的激酶 步骤 1:收集蛋白质信息 获取 UniProt ID: 对于每个基因,使用 UniProt 数据库获取其对应的蛋白质信息,包括 UniProt ID、序列和功能注释。UniProt 网站:https://www.uniprot.org/ 示…...

STM32 HAL库UART查询方式实例
本文中介绍USART编程涵盖了三种主要方法,详细介绍STM32F407微控制器结合HAL库,通过UART的查询方式来实现一个实用的密码验证程序。提示用户键入一个字符作为密码。只有当用户精准地输入字符6时,系统才会反馈“密码正确”的确认信息。反之&…...

数据结构--线性表双向链表的实现
目录 思路设计 总体思维导图 插入部分 头插法尾插法 任意位置插入 删除部分 头结点 尾节点 中间节点 只有头结点且删除的就是头结点 编辑 清空链表部分 遍历清空链表的所有节点 不遍历清空 各部分代码 Main部分 MyListedList部分 IndexOutOfException部分 …...

第一个Flutter应用(一)
1、创建项目 1.1 新建 1.2 选择Flutter SDK的位置 1.3 项目名称 英文单词加下划线起名规范,其他默认即可。 1.4 点击运行 发生报错显示我们的JAVA版本不符合 1.5 更改版本设置 1.6 再次启动项目 2、分析页面代码 以下是lib/main.dart的源代码(为了阅…...

批量查询快递单号物流信息:高效掌握最后更新动态
在电商和物流行业蓬勃发展的今天,快递单号的物流信息追踪显得尤为重要。对于商家和客户来说,了解包裹的最后更新物流状态是确保货物安全、及时送达的关键。本文将介绍如何批量查询快递单号的物流信息,帮助您高效掌握每个包裹的最新动态。 1运…...

随着硬件水平的提升,LabVIEW有哪些过去的编程方法被淘汰掉了
随着硬件水平的不断提升,尤其是处理器性能、存储能力、通信速度等方面的飞跃,LabVIEW的一些早期编程方法逐渐被更高效、现代的编程技术所取代。以下是一些随着硬件升级而逐步淘汰的LabVIEW编程方法和技术: 1. 低效的数据流传输方式 过去由于…...

Leetcode 206.反转链表
题目链接:206. 反转链表 - 力扣(LeetCode) 题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 解题思路…...

基于springboot和vue.js 养老院管理系统设计与实现
博主介绍:专注于Java(springboot ssm springcloud等开发框架) vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆…...

高效数据处理:MapReduce与Hive的实战应用
文章目录 hive分析汇总互联网日志分析1.项目需求2.数据说明3.算法思路 用户电影推荐1.项目需求2.数据说明3.算法思路4.解题步骤 简单数据统计WordCount数据说明 疫情数据分析1.项目需求2.数据说明step1:创建ods层数据表step2:创建dwd层数据表step3:创建d…...

【含开题报告+文档+PPT+源码】基于springboot的迎新系统
开题报告 大学迎新系统是为了满足大学在新生入学时的信息化处理需求而开发的系统。在传统方式下,我们新生接待工作是需要新生报名表,就使得我们需要耗费大量的纸张,这将造成资源浪费。在接待新生的时候需要让新生勾选、填写大量的表格&#…...
C#-委托delegate
C#-委托delegate 通常情况下,函数内部需要调用其他函数来实现代码的重用,但这样有一个问题: 如果需要更换所调用的函数则需要对该函数的定义再次修改, 事实上,在程序运行过程中,函数也是作为一个存储在堆中…...

编译Thingsboard3.7.0的过程记录
1、首先去掉test测试,否则会有一堆问题,pom.xml修改如下: <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${surefire.version}</ve…...

vulnhub-THE PLANETS-EARTH靶机
下载并导入靶机至VMWare,设置网络模式为NAT,开机 开启攻击机(kali),也设置为Nat模式,与靶机处于同一网段 扫描靶机ip Nmap 192.168.114.0/24 扫描网段内活跃的主机 可以推断靶机ip为192.168.114.129 扫描…...

【C语言】分支和循环(2)
🤔个人主页: 起名字真南 😙个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 关系操作符2 条件操作符3 逻辑操作符 :|| ,&& ,!3.1 逻辑取反运算符3.2 与运算符3.3 或运算符3.4 练习闰年判断3.5 短…...

Python数据分析-远程办公与心理健康分析
一、研究背景 随着信息技术的飞速发展和全球化的推进,远程工作(Remote Work)成为越来越多企业和员工的选择。尤其是在2020年新冠疫情(COVID-19)爆发后,全球范围内的封锁措施使得远程工作模式迅速普及。根据…...

LabVIEW提高开发效率技巧----使用动态事件
在LabVIEW开发过程中,用户交互行为可能是多样且不可预知的。为应对这些变化,使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧,并结合实际案例,说明如何通过动态事件提高程序…...

【STM32开发之寄存器版】(五)-窗口看门狗WWDG
一、前言 窗口看门狗简介: 窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个M…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...