Redis篇-1--入门介绍

1、Redis概述

‌Redis(Remote Dictionary Server),全称为远程字典服务。‌是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

Redis提供了多种数据类型的存储,来适应不同场景下的存储需求。并提供多种语言的API,兼容多种方式的集成。

Redis是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库,可以用作数据库、缓存、消息中间件、分布式锁等。

2、主要特点

(1)、基于内存

redis是内存数据库,即所有的数据都保存在内存中。所以redis的读写速度相比传统数据库基于磁盘IO的模式来说会快上很多,支持并发 10W QPS(每秒查询量),性能优秀。

(2)、I/O多路复用机制

Redis 是一个高性能的内存数据库,它的核心设计之一就是使用 I/O 多路复用来处理大量的客户端连接。它可以在一个线程中同时处理多个客户端请求,避免了为每个客户端创建独立的线程或进程,从而减少了上下文切换的开销,提高了系统的并发性和性能。
理解:redis是通过一个线程来处理多个客户端的请求(通过 I/O 多路复用实现),意在减少CPU上下文的切换,提升系统的并发性和性能。

重点概念理解下:

1、什么是文件描述符?

文件描述符: 是操作系统为每个打开的文件、套接字、管道等 I/O 资源分配的一个整数标识符。它用于唯一标识进程与某个 I/O 资源之间的连接。
文件描述符是操作系统内核管理 I/O 资源的方式,应用程序通过文件描述符与这些资源进行交互。

简单理解下:
一个进程可以访问多个文件(或其他网络终端或通道连接等)资源,这些访问都需要进程与文件建立连接后才能进行数据传输。操作系统为了能清晰区分这些连接,不导致数据传输错乱,会给每一个的这种连接(进程和文件通信)都添加一个唯一整数标识,就是文件描述符。

如:一个快递站可以给人发快递(快递站如:操作系统),每个人通过快递站给别人寄快递(寄快递如:建立传输连接),快递站需要对这次寄件添加唯一的快递单号(快递单号如:添加文件描述符),这样才能保证寄件的安全对吧。

2、有哪些类型的文件描述符?

(1)、文件:普通文件(如文本文件、图片文件等)。
(2)、套接字:网络连接(如 TCP/UDP 连接)。
(3)、管道:进程间通信的通道。
(4)、设备:如终端、打印机等硬件设备。

(3)、存储方式(key-value)

Redis存储数据都是基于key-value方式,类似于HashMap,其查找和操作的时间复杂度都是O(1)。

(4)、多数据结构支持

Redis提供了丰富的数据类型支持(5+3+1)。这里先介绍下,在后续会有详细示例。
1、String(字符串):最基本的类型,可以存储字符串、整数或浮点数。支持原子的递增和递减操作。
2、List(列表):双端链表,可以从两端插入和删除元素。适用于队列和栈的实现。
3、Set(集合):无序集合,成员是唯一的。支持交集、并集、差集等集合运算。
4、Sorted Set(有序集合):类似于集合,但是每个成员关联一个分数,可以根据分数排序。
5、Hash(哈希表):类似于 Java 中的 HashMap,可以存储字段和值的映射关系。适用于对象的存储。
6、Bitmaps(位图):一种特殊的字符串类型(2进制串),可以用来表示布尔数组,支持高效的位操作。
7、HyperLogLog(基数):用于估算集合中不同元素的数量,具有很高的空间效率。
基数:大规模数据集中的不同元素。(如:1,2,5,2,3的不同元素为1,2,3,5,即基数为4)。
8、Geospatial Indexes(地理空间索引):支持地理坐标点的存储和查询,可以计算两点之间的距离、查找附近的点等。
9、Streams(流):引入于 Redis 5.0,是一种类似消息队列的数据结构,支持消费组和消息回溯等功能。

(5)、支持事务

Redis 提供了简单的事务机制,Redis 事务的本质是一组命令的集合。当执行redis事务时,即一次性按照添加顺序依次执行这些命令,中间不会被打断或者干扰。

Redis 的事务机制并不像关系型数据库中的事务那样提供完整的ACID特性(原子性、一致性、隔离性和持久性),但它确实提供了一种方式来确保一组命令作为一个整体被执行。

(6)、发布/订阅(Pub/Sub)

Redis 发布/订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息传递模式,允许客户端订阅一个或多个通道(channel),并接收其他客户端发布到这些通道的消息。

实现该模式,主要包含3个部分:
1、发布者(Publisher):发布者可以向指定的通道发送消息。每个消息会被发送给所有订阅了该通道的客户端。
2、订阅者(Subscriber):订阅者可以订阅一个或多个通道,并接收订阅通道的消息。订阅者不会直接与发布者交互,它们只负责监听通道中的消息。
3、通道(Channel):通道是消息传递的媒介。发布者将消息发布到特定的通道,订阅者从这些通道接收消息。通道的名字是一个字符串,可以是任意的标识符。

(7)、持久化

前面也说过redis是基于内存的数据库,基于内存大大优化了性能问题。但也面临着意外的风险,比如突然停电或者意外宕机了,重启电脑后内存中的数据就都不存在了!所以为了数据安全一定要做持久化处理(将数据写入到磁盘中),这样即使宕机后重启也可以通过持久化文件将数据恢复。

Redis 的持久化的两种方式:
RDB(默认):快照形式是直接把内存中的数据保存到 dump.rdb 文件中,定时全量保存,保存的是数据。
AOF:把所有的对 Redis 的服务器进行修改的命令都保存到 appendonly.aof 文件中,定时向文件中追加,保存的是命令。

(8)、主从复制/读写分离

主从复制是 Redis 提供的一种数据冗余机制,允许你创建一个或多个从服务器(Slaves),它们会实时地复制主服务器(Master)的数据。这样可以在主服务器发生故障时提供备份,并且可以分担读取请求的负载,提高系统的整体性能。

读写分离是指将写操作定向到主服务器,而将读操作分散到从服务器上。这有助于减轻主服务器的压力,提升读取性能,因为通常读操作比写操作更频繁。

示例图如下:
在这里插入图片描述
原理:
数据同步原理:当主服务器接收到写操作时,它会将这些更改记录到自己的命令日志中(称为 AOF 或 RDB 文件)。然后,主服务器会将这些更改发送给所有连接的从服务器,从服务器接收并应用这些更改。完成数据同步主要分为两个过程:
(1)、初次同步(全量同步):当一个新的从服务器加入时,它会与主服务器进行全量同步,即从服务器会下载主服务器的一个快照(RDB 文件),并将其加载到内存中。之后,它会继续接收增量更新。
(2)、持续同步(增量同步):在初次同步完成后,从服务器会持续接收来自主服务器的命令,以保持数据的一致性。

配置方式:
在 redis.conf 中设置 slaveof 来指定主服务器的 IP 和端口。

(9)、哨兵机制(Sentinel)

Redis 哨兵机制(Sentinel)是一个监控和故障转移的机制,用于管理 Redis 主从架构中的节点,以提升redis系统整体的可用性,即实现redis高可用性。
它会自动监控主服务器和从服务器的状态,并在主服务器不可用时自动执行故障转移,选择一个健康的从服务器晋升为主服务器。
在这里插入图片描述
工作原理:
(1)、节点监控:Sentinel 持续监控主服务器和从服务器的心跳,以检测它们的健康状态。
(2)、故障通知:当 Sentinel 检测到主服务器不可用时,它会通知其他 Sentinel实例和客户端。
(3)、选举和故障恢复:如果大多数 Sentinel 实例同意主服务器已经失效,它们会投票选出新的主服务器。然后,选中的从服务器会被晋升为主服务器,其余的从服务器会重新配置为新主服务器的从服务器,继续完成工作。
(4)、配置更新:Sentinel 会自动更新客户端的配置信息,使它们能够正确地连接到新的主服务器。

配置方式:
在sentinel.conf文件中定义哨兵实例的配置,包括主服务器的地址、哨兵之间的通信端口等。

(10)、集群(Cluster)

Redis 集群(Cluster)是 Redis 的分布式解决方案,它允许你将数据分布在多个节点上,从而实现水平扩展。集群通过分片(Sharding)技术将键空间划分成多个片段,每个片段由不同的节点负责存储。此外,集群还支持自动故障转移和数据冗余。

工作原理:
(1)、分片:Redis Cluster使用哈希槽(hash slots)来分配键。共有16384个哈希槽,每个键根据其哈希值映射到一个具体的槽,而每个槽可以被分配给任意一个节点。
(2)、故障转移:每个节点都可以有多个从节点,用于提供冗余。如果主节点失败,集群会自动将一个从节点晋升为主节点。
(3)、一致性哈希:客户端在发送请求时,需要计算键对应的哈希槽,然后根据当前的槽-节点映射找到正确的节点。如果槽-节点映射发生变化(例如因为故障转移),客户端需要更新其本地缓存。
(4)、容错能力:即使某些节点失效,只要大多数节点仍然可用,集群就可以继续工作。

配置:
(1)、使用 redis-cli --cluster create 命令来初始化一个新的 Redis Cluster。
(2)、每个节点的 redis.conf 文件中需要启用集群模式(cluster-enabled yes),并配置集群公告 IP 和端口(cluster-announce-ip 和 cluster-announce-port)。

(11)、Lua脚本

Redis 支持使用 Lua 脚本来执行复杂的操作,这为 Redis 提供了更强的灵活性和性能优化能力。通过 Lua 脚本,你可以在服务器端执行一系列命令,而不需要多次往返客户端与服务器之间,从而减少了网络延迟并提高了效率。此外,Lua 脚本是原子性的,这意味着在脚本执行期间,其他客户端的请求不会被处理,确保了数据的一致性。

(12)、丰富的客户端库

Redis 拥有几乎所有编程语言的客户端库,方便开发者集成到各种应用中。

3、单线程模型

Redis 采用单线程模型来处理客户端请求,这意味着在任意时刻只有一个命令被执行。这种设计简化了 Redis 的实现,并确保了高并发环境下的数据一致性。尽管 Redis 是单线程的,但它通过高效的内存管理和网络 I/O 操作,仍然能够处理非常高的吞吐量。
在这里插入图片描述
上图即为redis的请求处理流程。可以看到redis接收到用户的请求后,全部推送到一个队列里,然后交给文件事件分派器,而它是单线程的工作方式,所以说 Redis 是单线程的。

4、默认配置

(1)、默认的数据库:redis总共有16个数据库,不指定的话默认连接第0个数据库。每个数据库的数据不共享。

(2)、key和value的限制:
Redis 对键(key)和值(value)的大小以及使用个数有一定的限制,这些限制旨在确保 Redis 的性能和稳定性。
长度限制:
redis的key和value的最大长度上限都是512M。当key大于10k时,称得上是大key。通常建议将键的长度保持在合理的范围内(例如 64 字节以内),以确保高效的内存使用和快速的查找。
数量限制:
Redis 没有明确的键数量限制,理论上可以存储 2^64 - 1 个键(即 18,446,744,073,709,551,615 个键)。然而,实际的键数量取决于你的硬件资源(如内存、CPU 等)和 Redis 的配置。

1byte(字节)= 8bit(位),1k = 1024byte,1M = 1024k,1G = 1024M,bit = 字节,一个汉字占2个bit,一个英文(不区分大小写)占1bit,中文标点占3个bit,英文占1个bit。

学海无涯苦作舟!!!

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

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

相关文章

antdv-<a-button>中属性的使用

UI组件库(User Interface Component Library)是一种预先构建好的、可重用的用户界面元素集合,旨在帮助开发者更快速、更简便地构建用户界面。这些组件通常包括按钮、表单、导航栏、模态框等,能够提供一致的外观和交互风格&#xf…

简单的多网卡选择指定网卡ip注册

简单的多网卡选择指定网卡ip注册 我们公司服务器上面有多个网卡,多网卡则本地ip有多个ip,我们启动服务的时候需要选定他特定的ip,我们服务需要特定的ip进行注册,才能进行正常的通讯功能,我们需要使用如下配置进行特定ip选择&…

鸿蒙NEXT开发案例:颜文字搜索器

【引言】 本文将介绍一个名为“颜文字搜索器”的开发案例,该应用是基于鸿蒙NEXT平台构建的,旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习,读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。 【环…

快速部署一套K8s集群-v1.28

快速部署一套K8s集群-v1.28 1.前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式: kubeadmKubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制包从github下载发行版的二进…

【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章: 《基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》 的…

用友U8+ API接口使用教程

前言 U8和其他的公开的开放API接口有一些差异,他是需要先对接的到代理服务器,通过代理服务器进行对接,所以只要保证U8能上网就能对接,和畅捷通T的模式有点类似 流程: 注册成为开发者(用于创建用友U8 API应…

检查读取数据寄存器输出的多扇出

为使第二寄存器被 RAM 原语吸收,来自存储器阵列的数据输出位的扇出必须为 1 。这在下图中进行了说明。 检查地址 / 读取数据寄存器上的复位信号 不应复位存储器阵列。只有 RAM 的输出可以容许复位。复位必须是同步的,以便将输出寄存器推断到 RAM 基元…

MongoDB-ObjectID 生成器

前言 MongoDB中一个非常关键的概念就是 ObjectID,它是 MongoDB 中每个文档的默认唯一标识符。了解 ObjectID 的生成机制不仅有助于开发人员优化数据库性能,还能帮助更好地理解 MongoDB 的设计理念。 什么是 MongoDB ObjectID? 在 MongoDB …

渗透测试工具 -- SQLmap安装教程及使用

随着网络安全问题日益严峻,渗透测试成为了保护信息安全的重要手段。而在渗透测试的众多工具中,SQLmap凭借其强大的自动化SQL注入检测和利用能力,成为了网络安全专家必备的利器。那么,你知道如何高效地使用SQLmap进行漏洞扫描吗&am…

SpringBoot 整合 RabbitMQ 实现流量消峰

RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将 RocketMQ 捐献给了 Apache,当然了今天的主角还…

Git-分支(branch)常用命令

分支 我们在做项目开发的时候,无论是软件项目还是其他机械工程项目,我们为了提高效率以及合理的节省时间等等原因,现在都不再是线性进行,而是将一个项目抽离出诸进行线,每一条线在git中我们就叫做分支,bran…

springboot425滑雪场管理系统(论文+源码)_kaic

摘要 近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定滑雪场管理系统的总体功能模块。然后,详…

好玩的汇编编译器NASM:一款基于x86架构的汇编与反汇编软件

好玩的汇编编译器NASM This is the project webpage for the Netwide Assembler (NASM), an asssembler for the x86 CPU architecture portable to nearly every modern platform, and with code generation for many platforms old and new. Netwide Assembler(…

【AI知识】有监督学习分类任务之支持向量机

1.支持向量机概念 支持向量机(Support Vector Machine, SVM) 是一种有监督学习算法,主要用于分类任务(也可用于回归任务,即支持向量回归,SVR)。SVM的核心思想是找到一个最优的超平面&#xff0…

杭州乘云联合信通院发布《云计算智能化可观测性能力成熟度模型》

原文地址:杭州乘云联合中国信通院等单位正式发布《云计算智能化可观测性能力成熟度模型》标准 2024年12月3日,由全球数字经济大会组委会主办、中国信通院承办的 2024全球数字经济大会 云AI计算创新发展大会(2024 Cloud AI Compute Ignite&…

【经典】制造供应链四类策略(MTS、MTO、ATO、ETO)细说

关注作者 制造供应链的牛鞭问题与复杂问题主要是从两个方面解决,一是同步化供应链消减从需求到供应的放大效应,二是供应链细分,针对不同的客户、不同的需求供应的匹配策略来应对复杂性,更好的满足客户并以最低的总成本来实现。 对…

实时日志与发展:Elasticsearch 推出全新专用的 logsdb 索引模式

作者:来自 Elastic Mark Settle, George Kobar 及 Amena Siddiqi Elastic 最新发布的 logsdb 索引模式是专为日志管理优化的功能,旨在提升日志数据的存储效率、查询性能以及整体可用性。这个模式专注于满足现代日志处理需求,提供更高效的日志…

React Image Crop——在React应用中轻松实现图片裁剪功能

React Image Crop是一个用于在React应用程序中裁剪和调整图像的库。它提供了一个简单而强大的界面,允许用户选择和调整裁剪区域,并生成裁剪后的图像。 什么是React Image Crop? React Image Crop是一个开源的React组件,用于在浏览…

【HarmonyOS】鸿蒙应用实现手机摇一摇功能

【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能,是通过获取手机设备,加速度传感器接口,获取其中的数值,进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下&#xf…

微积分复习笔记 Calculus Volume 2 - 3.7 Improper Integrals

3.7 Improper Integrals - Calculus Volume 2 | OpenStax