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

NoSql数据库Redis知识点

数据库的分类 

关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库
中的数据主流的 MySQL Oracle MS SQL Server DB2 都属于这类传统数据库。
NoSQL 数据库 ,全称为 Not Only SQL ,意思就是适用关系型数据库的时候就使用关系型数据库,不适
用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键 值存储(memcached Redis )、永久性键值存储( ROMA Redis )、面向文档的数据库
MongoDB CouchDB )、面向列的数据库( Cassandra HBase ),每种 NoSQL 都有其特有的使用场景及优点。

Redis简介

Redis 是一个开源的、遵循 BSD 协议的、基于内存的而且目前比较流行的键值数据库 (key-value
database) ,是一个非关系型数据库, redis 提供将内存通过网络远程共享的一种服务,提供类似功能的 还有memcached ,但相比 memcached redis 还提供了易扩展、高性能、具备数据持久性等功能。 Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛。

Redis核心特性

丰富的数据类型:Redis不仅支持基本的键值存储,还提供了字符串、列表、集合、哈希表和有序集合等数据结构。这些数据类型为开发者提供了灵活的操作能力,适应不同的应用场景。

原子性操作:Redis的所有操作都是原子性的,这意味着每个操作要么完全执行,要么完全不执行,确保了数据的一致性和完整性。

持久化机制:Redis支持将内存中的数据保存到磁盘上,以便在系统重启后恢复数据。这提供了数据安全性,防止系统故障导致的数据丢失。

发布订阅模式:Redis内置了发布/订阅模式,允许客户端之间通过消息传递进行通信,适用于消息队列和实时数据传输平台。

单线程模型:尽管Redis是单线程的,但它通过高效的事件驱动模型来处理并发请求,确保了高性能和低延迟。

主从复制:Redis支持主从复制,可以通过从节点备份数据或分担读请求,提高数据的可用性和系统的伸缩性。

        

Redis部署方式分类

Redis有四种主要的部署方式:单节点模式、主从模式、哨兵模式和集群模式

单节点模式

定义:单节点模式是Redis最简单的部署方式,就是在一台服务器上运行一个Redis实例,提供数据的读写服务。

优点:配置简单,操作简单,性能高,没有网络开销和数据同步的延迟。

缺点:数据容量受限于单台服务器的内存大小,无法进行横向扩展;数据安全性低,一旦服务器宕机或者数据损坏,会造成数据的丢失或不一致

主从模式

定义:主从模式是在单节点模式的基础上,增加了数据的复制功能。主从模式下,有一个主节点(master)和一个或多个从节点(slave)。主节点负责处理数据的读写操作,从节点负责复制主节点的数据,并可以提供只读服务。

优点:数据冗余,提高了数据的安全性和可靠性,可以用于数据的备份和恢复;负载均衡,分担了主节点的读压力,提高了系统的吞吐量和响应速度;故障恢复,当主节点发生故障时,可以手动或自动地将一个从节点升级为新的主节点,实现主节点的故障转移。

缺点:数据一致性不强,由于主从复制是异步的,可能会出现主从数据不一致的情况,尤其是在主节点故障时,从节点可能会丢失一部分未复制的数据;故障转移不自动,当主节点发生故障时,需要人工介入或者借助其他工具来实现从节点的自动升级,这会造成一定的服务中断和数据丢失

工作过程:

  1. 从服务器(slave)连接到主服务器(master)。
  2. 从服务器发送SYNC命令给主服务器。
  3. 主服务器执行BGSAVE命令,生成RDB文件,同时使用缓冲区记录此后执行的所有写命令。
  4. 主服务器将RDB文件发送给从服务器,从服务器接收并载入到内存中。
  5. 主服务器将缓冲区中的写命令发送给从服务器,从服务器执行这些命令。
  6. 如果有新的写命令到达主服务器,它们会被放入缓冲区等待同步。
  7. 当从服务器完成数据同步后,它会向主服务器发送一个确认消息。
  8. 主服务器收到确认消息后,将缓冲区中的写命令应用到自己的数据库中。
  9. 从服务器开始接受客户端的读请求。

哨兵模式(高可用)

定义:哨兵模式是在主从模式的基础上,引入了哨兵(sentinel)节点,用于监控主节点和从节点的运行状态,并在主节点发生故障时,自动将一个从节点升级为新的主节点,实现主节点的自动故障转移。

优点:自动故障转移,无需人工干预,减少了服务中断和数据丢失的风险;集群监控,可以实时感知主从节点的健康状况,及时发现和处理异常情况;配置中心,可以提供主节点的动态发现和通知服务,方便客户端的连接和切换。

缺点:部署复杂,需要维护额外的哨兵节点,增加了系统的管理成本;数据一致性仍然不强,由于主从复制仍然是异步的,故障转移过程中仍然可能会出现数据不一致的情况;存储能力仍然受限,由于所有的从节点都要复制主节点的全部数据,无法实现数据的分片存储,导致存储能力受限于单台服务器的内存大小。

工作过程:

每个哨兵 (Sentinel) 进程会向其它哨兵 (Sentinel) Master Slave 定时发送消息,以确认对方是否 ”着,如果发现对方在指定配置时间( 此项可配置 ) 内未得到回应,则暂时认为对方已离线,也就是所谓的 主观认为宕机”
哨兵群 中的多数 Sentinel 进程在对 Master 主服务器做出 SDOWN 的判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的 Master Server 下线判断,这种方式就是“ 客观宕机
宕机后通过一定的 vote 算法,从剩下的 slave 从服务器节点中,选一台提升为 Master 服务器节点,然后自动修改 相关配置,并开启故障转移(failover

集群模式

定义:集群模式是Redis最高级的部署方式,它是通过分片(sharding)技术,将数据分散存储在多个节点上,每个节点都可以执行读写操作,并且每个节点都有相应的从节点,保证数据的高可用性。

优点:存储能力强,可以通过增加节点的数量,实现数据的水平扩展,突破单台服务器的内存限制;性能高,可以通过分散读写压力,提高系统的并发能力和响应速度;高可用,可以通过主从复制和故障转移,实现数据的冗余和容错,保证服务的稳定性。

缺点:部署非常复杂,需要配置多个节点的角色、槽位、复制关系等,增加了系统的管理难度;数据一致性最弱,由于数据分散在多个节点上,且主从复制和故障转移都是异步的,可能会出现数据不一致、丢失或重复的情况;功能受限,由于数据分布在不同的节点上,一些涉及多个键的操作,如事务、聚合函数、跨节点的键迁移等,都会受到限制或不支持。

Redis的安装

rpm包安装

源码安装

1.去官方网站获取源码包并上传到目录下

2.解压源码包

3.安装一系列编译工具

4.切换目录进行编译

5.启动redis

直接启动会报错

编辑文件进行注释

再次启动

6.配置redis(vim /etc/redis/6379.conf),监听所有接口

7.重启登录redis

Redis基本操作

查看监听的网络接口和端口

写入和读取数据
设置写入数据维持时间
修改数据维持时间
查看所有key
选择数据库(redis中一共有0-15个数据库)
移动数据
改变键名
删除
清空当前库
清空所有库

Redis主从模式的搭建

1.编辑master配置文件,关闭保护模式然后重启服务
2.编辑配置文件 配置 slave节点
效果测试:

Redis哨兵模式搭建

1.在master中复制哨兵配置文件模板过来进行配置

2.通过sed对配置文件中无用的注释和空行进行删除

3.修改配置文件

protected-mode no 关闭保护模式,允许外部客户端连接。
port 26379: 设置Sentinel监听的端口号为26379。
daemonize no: 以非守护进程模式运行。
pidfile "/var/run/redis-sentinel.pid": 指定Sentinel进程的PID文件路径。
loglevel notice: 设置日志级别为notice,记录重要的信息。
sentinel monitor mymaster 172.25.254.10 6379 2: 监控名为mymaster的主节点,主节点的IP地址为172.25.254.10,端口号为6379,需要至少2个Sentinel节点同意才判断主节点故障。
sentinel down-after-milliseconds mymaster 10000: 当主节点连续10000毫秒(10秒)没有响应时,将其标记为不可用。
sentinel parallel-syncs mymaster 1: 在故障转移过程中,最多允许1个从节点与新的主节点同步数据。
sentinel failover-timeout mymaster 180000: 故障转移超时时间为180000毫秒(180秒)。

4.将配置文件分发到另外两个节点

5.启动服务(每个节点都要开启)

测试:另起一个终端关闭master服务查看另外的两个节点是否已经发色主节点偏移

Redis集群化搭建(需六台主机)

1.删除之前三个节点的数据和redis

2.在六个节点上统一安装redis

3.编辑所有节点的配置文件

masterauth "123456":设置主节点的认证密码为"123456"。

requirepass "123456":设置客户端连接时需要提供的认证密码为"123456"。

cluster-enabled yes:启用Redis集群模式。

cluster-config-file nodes-6379.conf:指定集群配置文件名为"nodes-6379.conf"。

cluster-node-timeout 15000:设置集群节点超时时间为15000毫秒(15秒)

4.重启服务进行登陆测试

5.创建redis-cluster

相关文章:

NoSql数据库Redis知识点

数据库的分类 关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQL 数据库 ,全称为 Not Only SQL &a…...

Redis 使用指南

Redis 使用指南 概述 Redis 是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists&#xf…...

c++与cmake:完整的C++项目构建注意事项

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 最近常常使用cmake构建c项目有感,从创建项目到打包发布总结一下需要注意的事情. 项目组织方式 具体的项目组织方式因人而异,这里推荐一种,在src目录中创建模块目录,再在include目录中常见对应的同名目录包含头文件,…...

Linux自主学习篇

用户及权限管理 sudo 是 "superuser do" 的缩写,是一个在类 Unix 操作系统(如 Linux 和 macOS)中使用的命令。它允许普通用户以超级用户(root 用户)的身份执行命令,从而获得更高的权限。 useradd…...

MQ入门(4)

Erlang:面向高并发的 单机的吞吐量就是并发性:Rabbitmq是10w左右(现实项目中已经足够用了),RocketMQ是10w到20w,Kafka是100w左右。 公司里的并发(QPS) 大部分的公司每天的QPS大概…...

linux下共享内存的3种使用方式

进程是资源封装的单位,内存就是进程所封装的资源的一种。一般情况下,进程间的内存是相互隔离的,也就是说一个进程不能访问另一个进程的内存。如果一个进程想要访问另一个进程的内存,那么必须要进过内核这个桥梁,这就是…...

伊丽莎白·赫莉为杂志拍摄一组素颜写真,庆祝自己荣膺全球最性感女人第一名

语录:女性应该做任何她们想做的事,批评她们的人都见鬼去吧。 伊丽莎白赫莉为《Maxim》杂志拍摄一组素颜写真,庆祝自己荣膺全球最性感女人第一名 伊丽莎白赫莉 (Elizabeth Hurley) 实在是太惊艳了,如今,《马克西姆》杂…...

Qt快捷键说明与用法

编辑与查找 CtrlF:在当前编辑窗口中查找关键字。支持大小写相关、全词匹配、正则表达式匹配等选项,并且查找之后还可以进行替换操作。 CtrlShiftF:进行全局查找,不局限于当前文件。注意,在某些情况下,这个…...

技术周刊 | TS 5.6、Chrome DevTools 性能面板上新、Vite 6 Beta、Fastify v5、HTTP 新方法 Query

增长能力,就是持续做出正确决定的能力。 大家好,我是童欧巴,欢迎来到第 128 期技术周刊。 资讯 TypeScript 5.6 TypeScript 5.6 如期发布。 Chrome DevTools 发布全新性能功能 Chrome DevTools 的性能面板上新测试,包括 Core…...

使用Mockito进行单元测试

1、单元测试介绍 Mockito和Junit是用于单元测试的常用框架。单元测试即:从最小的可测试单元(如函数、方法或类)开始,确保每个单元都能按预期工作。单元测试是白盒测试的核心部分,它有助于发现单元内部的错误。 单元测试…...

CSS 布局三大样式简单学习

目录 1. css 浮动 1.1 效果1 1.2 效果2 1.3 效果3 1.4 效果4 2. css 定位 2.1 absolute 2.2 relative 2.3 fixed 3. css 盒子模型 3.1 效果1 3.2 效果2 3.3 效果3 3.4 效果4 1. css 浮动 1.1 效果1 1.2 效果2 1.3 效果3 1.4 效果4 2. css 定位 2.1 absolute 2.2 …...

集成运放UA741的原理与应用的探索

我们发现TI公司提供了UA741的内部电路,此电路包括22个晶体管,11个电阻,1个二极管,1个电容。 1UA741设计需求 1.1有短路保护 UA741的短路保护功能‌是指当输出端发生短路时,该器件能够自动保护自身,防止因…...

LeetCode337. 打家劫舍III

// 很好的一道题目,既考察递归又考察动归 // 这个版本超时了,原因是暴搜 // 很显然这里使用的是前序,那是不是应该考虑后序?public int rob(TreeNode root) {if (root null) {return 0;}if (root.left null && root.rig…...

python基础(二) 包和import

包的创建 文件创建命令 在 Django 中,python manage.py startapp first_app 这一行命令的作用是创建一个新的应用(app),名为 first_app。在 Django 项目中,"app" 是实现某些功能模块的单独部分&#xff0c…...

选址模型 | 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容(Matlab) 问题建模:首先,需要将电动汽车充电站选址与定容问题进行数学建模,确定目标函数和约束…...

WPF入门教学十 资源与字典

在WPF(Windows Presentation Foundation)中,资源与字典是用于管理和重用UI元素的重要机制。它们不仅有助于保持XAML代码的整洁,还能提升应用程序的性能和可维护性。以下是关于WPF资源与字典的详细说明: 静态资源与动态…...

Ubuntu20.04配置NVIDIA+CUDA12.2+CUDNN【附所有下载资源】【亲测有效】【非常详细】

Ubuntu20.04 安装 cudatookit 12.2 cudnn 安装_ubuntu安装cuda toolkit-CSDN博客【最新】cuDNN在CUDA11.7Ubuntu20.04下的安装及卸载_cuda11.7对应的cudnn-CSDN博客...

Golang | Leetcode Golang题解之第424题替换后的最长重复字符

题目: 题解: func characterReplacement(s string, k int) int {cnt : [26]int{}maxCnt, left : 0, 0for right, ch : range s {cnt[ch-A]maxCnt max(maxCnt, cnt[ch-A])if right-left1-maxCnt > k {cnt[s[left]-A]--left}}return len(s) - left }f…...

软考高级:系统安全 -区块链特点:去中心化、开放性、自治性、安全性、匿名性

讲解 生活化例子 想象一下,你和朋友们玩一个共享账本的游戏。每个人都可以在账本上记账,没人可以单独改动账本,大家都可以随时查看账本内容,也不用再信任某个单独的人来管理账本。这就类似于区块链的工作原理。 概念讲解 去中…...

Pandas 数据分析入门详解

今日内容大纲介绍 DataFrame读写文件 DataFrame加载部分数据 DataFrame分组聚合计算 DataFrame常用排序方式 1.DataFrame-保存数据到文件 格式 df对象.to_数据格式(路径) ​ # 例如: df.to_csv(data/abc.csv) 代码演示 如要保存的对象是计算的中间结果,或者以…...

【网络】高级IO——epoll版本TCP服务器初阶

目录 前言 一,epoll的三个系统调用接口 1.1.epoll_create函数 1.1.1.epoll_create函数干了什么 1.2. epoll_ctl函数 1.2.1.epoll_ctl函数函数干了什么 1.3.epoll_wait函数 1.3.1.epoll_wait到底干了什么 1.4.epoll的工作过程中内核在干什么 二,…...

xml中的转义字符

文章目录 xml中的转义字符 xml中的转义字符 &amp;对应的字符是& <对应的字符是< >对应的字符是> &quot;对应的字符是" &apos;对应的字符是转义的实体引用虽然简单易用&#xff0c;但是需要记忆&#xff0c;而且如果字符串中包含大量的特殊字…...

Webpack:现代前端项目的强大打包工具

在现代前端开发中&#xff0c;随着应用的复杂性不断提高&#xff0c;我们需要一种工具来管理项目的依赖、优化代码结构并打包资源文件。Webpack 就是这样一个强大的打包工具&#xff0c;它为前端开发者提供了灵活、强大且可扩展的功能。本文将介绍 Webpack 的基本概念、安装与使…...

以root用户登陆ubuntu的桌面环境

去我的个人博客观看&#xff0c;观感更佳哦&#xff0c;&#x1f619;&#x1f619; 前言 在学习Linux的时候&#xff0c;经常都需要使用sudo权限来对配置文件进行修改&#xff0c;常用的方法就是用vim编辑器在命令行界面进行修改&#xff0c;比如sudo vim /etc/profile&#…...

《系统架构设计师教程(第2版)》第17章-通信系统架构设计理论与实践-04-其他网络架构(存储网络架构、软件定义网络架构)

文章目录 1. 存储网络架构1.1 网络连接存储 (NAS)1.2 存储区域网络&#xff08;SAN&#xff09; 2. 软件定义网络架构2.1 软件定义网络&#xff08;SDN&#xff09;2.2 SDN架构2.3 相关技术2.3.1 控制平面技术2.3.2 数据平面技术1&#xff09; 硬件处理方式4&#xff09; 软件处…...

大话Python|基础语法(上)

一、单行注释 以下代码输出一个Hello World&#xff01;字符串 在Python代码中&#xff0c;注释会自动被Python解析器忽略 print(Hello World) 二、多行注释 在Python代码中&#xff0c;注释一共有两种形式&#xff1b; 1、单行注释&#xff1a;注释的内容只有一行 2、多行…...

crosscrossover24支持的游戏有那些

CrossOver刚刚更新了24版本&#xff0c;支持《地平线零之曙光》、《以撒的结合&#xff1a;重生》等游戏。一起来看看它有哪些更新吧&#xff01;之前买过23版的用户可以在1年之内免费升级哦&#xff0c;点击这里查看升级教程。 一、功能优化 - 更新 Wine 至最新的稳定版 Wine …...

如何免费调用GPT API进行自然语言处理

在当今这个信息爆炸的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术正逐步渗透到我们生活的各个方面&#xff0c;从智能客服到内容创作&#xff0c;无一不彰显着其强大的应用价值。而GPT&#xff08;Generative Pre-trained Transformer&#xff09;作为NLP领域…...

vue无感刷新Token并重新请求

vue 拦截器拦截401重新请求Token 无感刷新Token 之后重新请求报401的接口 instance.interceptors.response.use(async (response) > {let { data } response;if (data.code 401 || data.code 403) {return await handleExpiredToken(response.config);}if (data.code ! …...

C++和OpenGL实现3D游戏编程【连载10】——纹理的半透明显示

1、本节实现的内容 上一节课我们讲到了图片的镂空显示,它能在显示图片时去除指定颜色的背景,那么这节课我们来说一下图片的半透明显示效果,半透明效果能给画面带来更高质量的提升,使图片显示的更自然,产生更真实的效果。下面是一个气泡向上漂浮的效果。 气泡效果 2、非纹…...