当前位置: 首页 > news >正文

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还可以作为数据库使用,现在市面上的数据库很多,比如MySQLpostgreSQL等等。但是Redis与它们不一样,这些数据库都在硬盘中存储数据,读写的速度很慢,而Redis在内存中读写,速度非常高。

既然这样了,为什么Redis没有完全取代这些数据库?因为内存是非常贵的,因此Redis的存储空间并不大,不能存储大量数据。

最常见的情况下,其实Redis是配合其他数据库使用的,比如用MySQL作为数据库,用Redis做缓存。将访问频率最高的数据放到Redis中,每次用户访问时先查找Redis,如果没找到再去MySQL找。


分布式架构

想让Redis发挥出自身优势,就离不开分布式三个字,接下来介绍一下什么是分布式。

  • 单机架构

在这里插入图片描述

对于一些简单的服务端应用,在服务器上一般都会运行一个服务端进程,使用数据库存储数据。服务进程通过网络接收用户的请求,进行业务处理,并对数据库进行读写。

但是如果用户人数多起来了,那么一台主机就无法应付,比如内存、网络、硬盘、CPU等资源都可能不足,一台主机的能力有限,此时就有两种解决思路:

  1. 对软件进行优化,提高软件的效率
  2. 引入更多的服务器,让多个服务器共同完成一个服务

一旦引入了多台服务器完成一个服务,那么整个系统就称为一个分布式系统了。要注意的是,并不是直接再买一台服务器就可以解决问题的,还要考虑如何部署服务,多个主机上的服务如何完成数据的同步等等复杂的问题,最后问题又回归到了软件层面。

  • 应用数据分离架构

在这里插入图片描述

当有了多台主机,为了提高服务器的效率,会让一个服务器尽可能只干一种活,此时就把应用服务和数据库分离开,服务器只专门负责其中一个任务。

  • 应用服务集群架构

在这里插入图片描述

当业务量再大起来,就要由多台服务器来处理业务逻辑,此时多个服务器共同完成一个任务,称为一个集群。这种架构叫做应用服务集群架构。那么当用户向服务器发起请求,到底要发往哪一台主机?也就是说此时需要有一个进程来决策用户的请求给哪一个应用服务完成,此时就引入了负载均衡,保证每个应用服务承担差不多的任务。

  • 读写分离架构

在这里插入图片描述

当应用服务多了起来,那么整个服务要存储的数据也就多了,此时数据库系统不可能只用一台服务器处理,所以就要用多个服务器来共同完成数据存储。

之前说过,尽可能让一个服务器完成相同的任务,而数据库的任务无非就是读取与写入,此时把读写分开,就称为读写分离架构。一个服务器负责写入数据库,另一个数据库负责读取数据,此时被写入的数据库还要实时进行数据同步,将数据传给被读的数据库。

对于多个数据库的情况,往往会选出一个头儿,称为主数据库,其余数据库称为从数据库,这种架构称为主从架构

  • 冷热分离架构

在这里插入图片描述

在实际上,数据库中的数据只少量被访问,计算机界常说二八原则,即20%的数据可以处理80%的访问量。那么就可以把这小部分数据拿到缓存中,以更快的速度访问到。

此时读取数据的逻辑就是,先读取缓存中的数据,如果缓存中有那么直接返回,如果缓存没有,再去数据库查找。而此处的缓存,就是Redis的应用场景之一。

  • 分库架构

在这里插入图片描述

当业务再庞大些,就可能出现一个数据库的表就存不下一张表了,此时就要对表进行再拆分,一个数据库只存一个表,根据具体的种类去查询某一个数据库。此处每个表都用一个数据库集群来存储,遵顼之前的主从,读写分离架构。

  • 微服务架构

在这里插入图片描述

当应用服务再复杂些,此时业务逻辑就很难维护,此时就可以把整个服务拆分为多个服务。每个服务只负责一个模块的业务开发,一个个小的服务称为微服务,一群微服务共同完成一个大服务,这种架构称为微服务架构


Redis特性

市面上有很多NoSQL类型的数据库,而Redis可以脱颖而出,这离不开它的很多特性。

  1. 速度快

Redis在内存中存储数据,访问效率非常高,官方给出的读写性能可以达到10 w/s。另外的,Redis使用单线程处理数据,避免了多线程的竞争问题。

  1. 使用非关系型数据库

Redis使用键值对来存储数据,这与常规的数据库不同,比如MySQL使用表来存储数据,这称为关系型数据库,而使用键值对的形式称为非关系型数据库

其内部提供了大量的数据结构,比如哈希,字符串,集合等等。

  1. 支持脚本

Redis支持使用编程语言Lua处理一些逻辑,甚至通过Lua自定义命令。

  1. 简单稳定

Redis的源码非常少,在3.0版本加入集群后,也就5w行,相比于其它数据库,这算很少的了。而且Redis的代码非常优雅,普通的开发人员也可以搞懂Redis的运行机制。

  1. 可拓展性高

如果不满足于Redis原生支持的几大数据类型,程序员甚至可以自己写一个数据结构在Redis使用。

  1. 持久化

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内,在文件中可以看到bindprotected-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测试&#xff0c;否则会有一堆问题&#xff0c;pom.xml修改如下&#xff1a; <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${surefire.version}</ve…...

vulnhub-THE PLANETS-EARTH靶机

下载并导入靶机至VMWare&#xff0c;设置网络模式为NAT&#xff0c;开机 开启攻击机&#xff08;kali&#xff09;&#xff0c;也设置为Nat模式&#xff0c;与靶机处于同一网段 扫描靶机ip Nmap 192.168.114.0/24 扫描网段内活跃的主机 可以推断靶机ip为192.168.114.129 扫描…...

【C语言】分支和循环(2)

&#x1f914;个人主页: 起名字真南 &#x1f619;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 关系操作符2 条件操作符3 逻辑操作符 &#xff1a;|| &#xff0c;&& &#xff0c;&#xff01;3.1 逻辑取反运算符3.2 与运算符3.3 或运算符3.4 练习闰年判断3.5 短…...

Python数据分析-远程办公与心理健康分析

一、研究背景 随着信息技术的飞速发展和全球化的推进&#xff0c;远程工作&#xff08;Remote Work&#xff09;成为越来越多企业和员工的选择。尤其是在2020年新冠疫情&#xff08;COVID-19&#xff09;爆发后&#xff0c;全球范围内的封锁措施使得远程工作模式迅速普及。根据…...

LabVIEW提高开发效率技巧----使用动态事件

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

【STM32开发之寄存器版】(五)-窗口看门狗WWDG

一、前言 窗口看门狗简介&#xff1a; 窗口看门狗通常被用来监测&#xff0c;由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新&#xff0c;看门狗电路在达到预置的时间周期时&#xff0c;会产生一个M…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...

AcWing 3417:砝码称重——位集合

【题目来源】 3417. 砝码称重 - AcWing题库 【题目描述】 你有一架天平和 N 个砝码&#xff0c;这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。 请你计算一共可以称出多少种不同的正整数重量&#xff1f; 注意砝码可以放在天平两边。 【输入格式】 输入的第一行包含一个整数 N。 …...

Vue 3 Teleport 实战:优雅实现模态框、通知和全局组件

Vue 3 Teleport&#xff1a;突破 DOM 层级限制的组件渲染利器 在 Vue 应用开发中&#xff0c;组件通常与其模板的 DOM 结构紧密耦合。但当处理模态框&#xff08;Modal&#xff09;、通知&#xff08;Toast&#xff09;或全局 Loading 指示器时&#xff0c;这种耦合会成为障碍…...