《Redis 核心技术与实战》课程学习笔记(一)

news2024/11/22 14:17:29

基本架构:一个键值数据库包含什么?

这样学 Redis,才能技高一筹

  • 为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题:
    • 一个是写 AOF 和 RDB 会造成 Redis 性能抖动;
    • 另一个是 Redis 集群数据同步和实例恢复时,读 RDB 比较慢,限制了同步和恢复速度。
    • 其实,一个可行的解决方案就是使用非易失内存 NVM,因为它既能保证高速的读写,又能快速持久化数据。
  • 很多技术人都有一个误区,那就是,只关注零散的技术点,没有建立起一套完整的知识框架,缺乏系统观,但是,系统观其实是至关重要的。
    • 比如,要把 Redis 的长尾延迟维持在⼀定阈值以下:
      • 首先对 Redis 的线程模型做分析,对于单线程的 Redis 而言,任何阻塞性操作都会导致长尾延迟的产生。
      • 接着开始寻找可能导致阻塞的关键因素,一开始想到的是网络阻塞,但 Redis 使用了 IO 多路复用机制,并不会阻塞在单个客户端上。
      • 再后来,主要把目光转向了键值对数据结构、持久化机制下的 fork 调用、主从库同步时的 AOF 重写,以及缓冲区溢出等多个方面。
    • 如何高效地形成系统观呢?
      • 只要你能抓住主线,在自己的脑海中绘制一幅 Redis 全景知识图,这完全是可以实现的。
      • Redis 知识全景图包括“两大维度,三大主线”。“两大维度”就是指系统维度和应用维度,“三大主线”也就是指高性能、高可靠和高可扩展。
        在这里插入图片描述
  • Redis 的各大典型问题
    在这里插入图片描述

构建一个简单的键值数据库

可以存哪些数据?

  • 对于键值数据库而言,基本的数据模型是 key-value 模型。
    • 不同键值数据库支持的 key 类型一般差异不大,而 value 类型则有较大差别。
    • 我们在对键值数据库进行选型时,一个重要的考虑因素是它支持的 value 类型。
      • 例如,Memcached 支持的 value 类型仅为 String 类型,而 Redis 支持的 value 类型包括了 String、哈希表、列表、集合等。
      • Redis 能够在实际业务场景中得到广泛的应用,就是得益于支持多样化类型的 value。

可以对数据做什么操作?

  • SimpleKV 需要支持 3 种基本操作,即 PUT、GET 和 DELETE。
    • PUT:新写入或更新一个 key-value 对;
    • GET:根据一个 key 读取相应的 value 值;
    • DELETE:根据一个 key 删除整个 key-value 对。
  • 在实际的业务场景中,我们经常会碰到这种情况:查询一个用户在一段时间内的访问记录。
    • 这种操作在键值数据库中属于 SCAN 操作,即根据一段 key 的范围返回相应的 value 值。
    • 因此,PUT/GET/DELETE/SCAN 是一个键值数据库的基本操作集合。
  • 大体来说,一个键值数据库包括了访问框架、索引模块、操作模块和存储模块四部分:
    在这里插入图片描述

采用什么访问模式?

  • 访问模式通常有两种:
    • 一种是通过函数库调用的方式供外部应用使用,就是以动态链接库的形式链接到我们自己的程序中,提供键值存储功能;
    • 另⼀种是通过网络框架以 Socket 通信的形式对外提供键值对操作,这种形式可以提供广泛的键值存储服务。
  • 实际的键值数据库也基本采用上述两种方式,例如 RocksDB 以动态链接库的形式使用,而 Memcached 和 Redis 则是通过网络框架访问。

如何定位键值对的位置?

  • 索引的作用是让键值数据库根据 key 找到相应 value 的存储位置,进而执行操作。
  • Memcached 和 Redis 采用哈希表作为 key-value 索引,而 RocksDB 则采用跳表作为内存中 key-value 的索引。

不同操作的具体逻辑是怎样的?

  • SimpleKV 的操作模块就实现了不同操作的具体逻辑:
    • 对于 GET/SCAN 操作而言,此时根据 value 的存储位置返回 value 值即可;
    • 对于 PUT 一个新的键值对数据而言,SimpleKV 需要为该键值对分配内存空间;
    • 对于 DELETE 操作,SimpleKV 需要删除键值对,并释放相应的内存空间,这个过程由分配器完成。

如何实现重启后快速提供服务?

  • SimpleKV 采用了常用的内存分配器 glibc 的 malloc 和 free,因此,SimpleKV 并不需要特别考虑内存空间的管理问题。Redis 的内存分配器提供了多种选择,分配效率也不一样。
  • 鉴于磁盘管理要比内存管理复杂,SimpleKV 就直接采用了文件形式,将键值数据通过调用本地文件系统的操作接口保存在磁盘上。
    • 此时,SimpleKV 只需要考虑何时将内存中的键值数据保存到文件中就可以了。
    • 和 SimpleKV 一样,Redis 也提供了持久化功能。不过,为了适应不同的业务场景,Redis 为持久化提供了诸多的执行机制和优化改进。

从 SimpleKV 演进到 Redis在这里插入图片描述

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

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

相关文章

关于Kettle ETL java脚本编写遇到的一些问题记录

Kettle ETL java脚本编写遇到的一些问题记录 1.文本信息输出 使用方法**logBasic()**参数必须是字符串 这部分内容会在ETL的日志窗口显示 2.获取参数数据 1.获取上个节点传输的数据 可以直接在左侧双击获取 2.全局参数获取 在启动运行的变量设置参数 在java代码中获取方式 …

Unity内存分析与优化实践

目录 前言优化前分析Committed Memory Tracking StatusMemory Usage 开始内存优化贴图优化贴图分辨率优化去除透明通道和mipmap其他关于贴图的优化技术 Shader优化优化Always Included Shaders优化Preloaded Shaders优化Shader代码共享Shader 优化Mesh降低屏幕分辨率优化效果内…

IDEA+Spring Boot+MyBatis+shiro+Layui+Mysql智能平台管理系统

IDEAJavaSpring BootMyBatisshiroLayuiMysql智能平台管理系统 一、系统介绍1.环境配置 二、系统展示1.登录2.注册3.发帖4.留言5.提交问卷6.展示公告7.查看文章8.管理员登录9.管理员管理10.用户管理11.问卷管理12.问卷结果管理13.帖子分类管理14.数据分析统计15.公告管理16.帖子…

基于线性准则的考虑风力发电不确定性的分布鲁棒优化机组组合(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Node.js知识梳理(二)——进阶

以下内容来自对《从前端到全栈》一书的学习记录~ 学习的时候用的是V16.20.0,18之后的语法差别还是有的~ 请求优化 我们在请求资源的时候,是需要做优化的,这里的优化涉及到了缓存。浏览器的缓存策略有两种: 强缓存协商缓存 关于…

分解整体:将整体式架构转换为微服务的容器化之旅

传统上,软件应用程序是使用单体架构开发的,其中所有应用程序组件都紧密交织在一起,并作为一个单元进行部署。随着软件应用变得更为复杂,组织开始依赖分布式系统,单体架构的限制开始变得更加明显。容器化被引入作为解决…

关于连接数据库时只能使用localhost而不能使用IP连接的问题解决办法

出现:java.sql.SQLException: null, message from server: "Host DESKTOP-H84MBU3 is not allowed to connect to this MySQL server"问题 解决办法: 1、打开数据库操作命令窗口 2、修改user表中 "root" 所对应的 "host&q…

JMeter之IP欺骗技术(模拟不同的IP地址并发请求)

目录 前言: 第一步:在负载机上绑定IP地址 第二步:点击高级,添加伪造的IP地址 第三步:新增IP地址复制到文本 第四步:新建参数化请求 第五步:新建压力测试脚本 第六步:配置线程…

【Mysql】事务原理与优化最佳实践(四)

前言 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增 删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题&…

【C】函数

目录 【1】函数是什么 【2】C语言中函数的分类 【2.1】库函数 【2.2】如何学会使用库函数 【2.3】自定义函数 【3】函数的参数 【3.1】实际参数(实参) 【3.2】形式参数(形参) 【4】函数的调用 【4.1】传值调用 【4.2】传址调用 【…

kubernetes环境搭建及部署

一、kubernetes 概述 1、kubernetes 基本介绍 kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源 的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效…

【Python】文件

文章目录 一. 什么是文件二. 文件路径三. 打开文件四. 关闭文件五. 写文件1. 清空写2. 追加写 六. 读文件1. 使用 read 方法读取2. 使用 for 循环按行读取3. 使用 readlines 方法读取整个文件的内容 七. 上下文管理器1. 什么是上下文管理器?2. 为什么要有上下文管理…

ESP8266模块MQTT AT Commands 发送 json字符串

ESP8266 wifi模块介绍 ESP8266EX 由乐鑫公司开发,提供了⼀套⾼度集成的 Wi-Fi SoC 解决⽅案,其低功耗、紧凑设计和⾼稳定性可以满⾜⽤户的需求。ESP8266EX 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能,既能够独⽴应⽤,也可以作为从机…

ORA-31664: unable to construct unique job name when defaulted

某个环境备份不足空间问题处理后,手动执行expdp备份的脚本,报错如下 Export: Release 11.2.0.4.0 - Production on Tue Jul 4 11:46:14 2023 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle D…

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例) 目录 【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常…

Windows环境部署MySQL_5.7的安装、测试连接以及卸载全过程实操手册

前言: 前面记录了双环境的oracle的安装卸载及相关测试评估,这里记录下 MySQL5.7社区免费版的部署手册。 什么是 MySQL MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数…

window.open()实现PDF预览

效果图如下: 页面使用: window.open(strUrl) 参数说明如下图:

深度学习笔记之Transformer(四)铺垫:LayerNormalization

深度学习笔记之Transformer——LayerNormalization 引言回顾:批标准化问题描述问题处理 层标准化批标准化无法处理的问题 引言 在介绍 Transformer \text{Transformer} Transformer模型架构之前,首先介绍 Transformer \text{Transformer} Transformer的…

linux 环境下ElasticSearch 7.1.6.3、kibana-7.16.3安装

安装包放入百度网盘,自取 链接:https://pan.baidu.com/s/1Uh9pKFoaz9qi4CE4_GmlOA?pwdroky 提取码:roky 快速演示下安装操作: ElasticSearch 7.1.6.3: 1.上传至服务器相应目录下 我传到的/home目录下&#xff0…

0、技术选型

技术选型参考: 系统数据流程图 框架发行版本选型 1)如何选择Apache/CDH/HDP版本? (1)Apache:运维麻烦,组件间兼容性需要自己调研。(一般大厂使用,技术实力雄厚&#xf…