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

Redis原理剖析

一、Redis简介

Redis是一个开源的,基于网络的,高性能的key-value数据库,弥补了memcached这类key-value存储的不足,在部分场合可以对关系数据库起到很好的补充作用,满足实时的高并发需求。
Redis跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。支持在服务器端计算集合的并、交和补集(difference)等,还支持多种排序功能。

说明: Redis客户端跟服务端间的网络数据传输未加密,建议不要使用Redis存取敏感数据,否则可能存在安全风险。

二、Redis结构

Redis包含Redis Server与Redis-WS,如下图所示
在这里插入图片描述

  • Redis Server:Redis组件的核心模块,负责Redis协议的数据读写、数据持久化、主从复制、集群功能。
  • Redis-WS:Redis WebService管理模块,主要负责Redis集群的创建、扩容、减容、查询、删除等操作,集群管理信息存入DB数据库。

三、Redis原理

Redis持久化

Redis提供了RDB与AOF等多种不同级别的持久化方式。

  • RDB持久化
    可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。

  • AOF持久化
    记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾。Redis还可以在后台对AOF文件进行重写,使得AOF文件的体积不会超出保存数据集状态所需的实际大小。

Redis可以同时使用AOF持久化和RDB持久化。在这种情况下,当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据集通常比RDB文件所保存的数据集更完整。用户也可以关闭持久化功能,让数据只在服务器运行时存在。

Redis运行模式

Redis实例可以部署在一个或多个节点上,且一个节点上也可以部署一个或多个Redis实例(每个节点上Redis实例的个数由软件根据节点硬件资源情况计算得出)。

最新版本的Redis支持集群功能,可以将多个Redis实例组合为一个Redis集群,从而对外提供一个分布式key-value数据库。集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。

  • 单实例模式
    单实例模式逻辑部署方式如下图所示:
    在这里插入图片描述
    说明:

  • 一个主实例(master)可以对应有多个从实例(slave),从实例本身还可连接从实例。

  • 发给主实例的命令请求,主实例会实时同步给从实例进行处理。

  • 主实例宕机,从实例不会自动升主。

  • 从实例默认只读,在配置了“slave-read-only”为no时,从实例也可写。但从实例重启后,会从主实例同步数据,之前写入从实例的数据丢失。

  • 多层级从实例的结构,相对所有从实例都直接连接在主实例下的结构,由于减少了主实例需要直接同步的从实例个数,一定程度上能提升主实例的业务处理性能。

  • 集群模式
    集群模式逻辑部署方式如下图所示:
    在这里插入图片描述
    说明:

  • 多个Redis实例组合为一个Redis集群,共16384个槽位均分到各主实例上。

  • 集群中的每个实例都记录有槽位与实例的映射关系,客户端也记录了槽位与实例的映射。客户端根据key进行哈希计算,然后和16384进行取模运算,得到槽位值。根据槽位-实例映射,将消息直接发送到对应实例处理。

  • 默认情况,从实例不能读不能写,在线执行readonly命令可使从实例可读。

  • 主实例故障,由集群中剩余的主实例选举出一个从实例升主,需要半数以上主实例运行状态“良好”才能选举。

  • cluster-require-full-coverage配置项指示集群是否要求完整,若配置为yes,则其中一组主从都故障时,集群状态为故障,整个集群不能处理命令;若配置为no,则半数以上主实例运行状态“良好”,集群状态是“良好”。

  • Redis集群可以进行扩容、减容(新实例加入集群或Redis实例退出集群),并进行槽位迁移。

四、Redis-Data-Sync

Redis-Data-Sync是一个用于主备集群Redis服务之间的数据同步工具。该工具从主集群中实时同步逻辑集群内的数据到备集群,在备集群上提供一个主集群中Redis服务的数据副本。

http://www.lryc.cn/news/143464.html

相关文章:

  • 【送书活动】AI时代,程序员需要焦虑吗?
  • 什么是 JSON:理解和运用 JSON 的基本概念
  • CSDN每日一练 |『异或和』『生命进化书』『熊孩子拜访』2023-08-27
  • 整数拆分乘积最大
  • 浅谈 Linux 下 vim 的使用
  • leetcode:只出现一次的数字Ⅲ(详解)
  • 【vue3.0 使用组合式定义组件】
  • Tensor-动手学深度学习-李沐_笔记
  • Kafka生产者原理 kafka生产者发送流程 kafka消息发送到集群步骤 kafka如何发送消息 kafka详解
  • Uniapp笔记(七)uniapp打包
  • 软考高级系统架构设计师系列论文七十六:论基于构件的软件开发
  • 基于Thinkphp6框架全新UI的AI网址导航系统源码
  • Html 补充
  • Visual Studio编译出来的程序无法在其它电脑上运行
  • 习题练习 C语言(暑期第二弹)
  • 树莓派使用Nginx+cpolar内网穿透实现无公网IP访问内网本地站点
  • 攻防世界-Web_php_unserialize
  • 云化背景下的接口测试覆盖率自动化检查
  • QCC_BES 音频重采样算法实现
  • 如何使用CSS实现一个3D旋转效果?
  • 联想电脑装系统无法按F9后无法从系统盘启动的解决方案
  • AMEYA360:大唐恩智浦电池管理芯片DNB1168-新能源汽车BMS系统的选择
  • 【Python进阶学习】【Excel读写】使用openpyxl写入xlsx文件
  • Docker(md版)
  • 如何使用CSS实现一个无限循环滚动的图片轮播效果?
  • 你使用过WebSocket吗?
  • Spark整合hive的时候出错
  • SocketTools.NET 11.0.2148.1554 Crack
  • 【深度学习-seq2seq模型-附核心encoder和decoder代码】
  • videojs 实现自定义组件(视频画质/清晰度切换) React