基于内存操作的Redis数据库--详解

news2024/11/8 20:39:49

目录

基本概念

基本操作

redis的五个基本类型

Redis-key(不区分大小写)

字符串 string

Redis的特殊类型

geospatial地理空间

 事务

Redis的持久化

RDB(.rdb)

触发机制

优点

 缺点

AOF(.aof)

优点

缺点

Redis发布订阅

相关命令

Redis主从复制

哨兵模式

哨兵在做什么?

Redis缓存穿透和雪崩

缓存穿透

解决办法

缓存击穿

解决办法

缓存雪崩

解决办法


 

基本概念

Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。(使用内存存储的非关系型数据库)

默认有16个数据库

核心:单线程操作很快,Redis是将所有数据全部放在内存中的,所以说使用单线程去操作,效率就是最高的,相比于多线程,减少了CPU上下文切换的耗时。对于内存系统来说,没有上下文切换效率就是最高的,多次读写都是在一个CPU上的。

Redis是C语言实现的,官方数据:读:110000/s 写: 80000/s,完全不比同样使用key-value的Memcached差,速度与内存和网络带宽有关

基本操作

select                      切换数据库

dbsize                     查看数据大小

keys *                      查看所有的key值

flushdb   flushall      清空当前数据库和清空所有数据库

319cc8a505584bd1a77fd99a52946e49.png

 

redis的五个基本类型

Redis-key(不区分大小写)

SET               设置key

GET               查看key的值

EXPIRE         设置过期时间(实时刷新返回量较高的数据)

TTL                查询过期时间

EXISTS          判断当前的key是否存在

KEYS *           查看当前所有的key

DEL KEY        删除当前的key

TYPE              查看key存储的value的类型

字符串 string

列表 list

集合 set

srandmember set value 做抽奖很容易

Redis的特殊类型

geospatial地理空间

 geoadd         添加地理位置

geopos           返回给定名称和经纬度

geodist           返回给定的两个位置之间的距离

geohash          返回一个11个字符的geohash字符串

georadius        以给定的经纬度为中心,寻找某一半径内的元素

 事务

  1. 开启事务···multi
  2. 命令入队···...
  3. 执行事务···exec

Redis的持久化

redis是内存数据库,如果不将内存中的数据保存到磁盘中,一旦服务器进程退出,服务器中的数据库状态就会消失,所以redis提出了持久化功能。

RDB(.rdb)

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是快照,恢复时将快照文件直接读到内存中。单独创建一个子进程,先将数据写入到一个临时文件中,等到持久化结束,再用这个新的临时文件替换上一次的持久化好的文件。

就是在做文件复制

触发机制

  1. 保存时
  2. flushall
  3. 退出redis

优点

  1. 适合大规模的数据恢复
  2. 对数据的完整性要求不高

 缺点

  1. 需要一定的时间间隔,如果redis宕机,最后一次保存的持久化文件之后的数据都没有了
  2. fork进程的时候,需要占用一定的内存空间

AOF(.aof)

将所有的写操作的命令都记录下来,在回复的时候将所有的命令都执行一遍

也就是保存命令

优点

  1. 每一次修改都会同步,文件的完整性比较好
  2. 每秒同步一次,可能只会丢失1s的数据

缺点

  1. 相对于数据文件,aof远远大于rdb(因为aof要保存整条命令,然后重新运行,rdb只需要保存已经运行好的临时文件)
  2. 修复速度慢
  3. 运行效率慢

Redis发布订阅

类似一种消息队列

  1. 订阅者订阅通道
  2. 发布者发布
  3. 订阅者接收

相关命令

ff063be8d7b04635b5347d88c90d5632.png

Redis主从复制

将一个Redis服务器的数据复制到其他的redis服务器。前面的是主节点,后面的是从节点。

主节点写数据,从节点读数据,从节点每次从主节点处更新所读数据

作用

  1. 数据冗余:实现了数据的热备份
  2. 故障恢复:主节点出现问题,从节点便可转变为服务的提供者,从节点提供主节点的数据备份
  3. 负载均衡:读写分离,写场景连接主节点,读场景连接从节点,分担服务器负载
  4. 高可用的基石:是哨兵和集群的实现基础

默认下,每台Redis服务器都是主机,只需要配置从机和从库 

哨兵模式

 自动投票选举主机:当主服务器宕机后,需要把从服务器切换为主服务器,优先考虑哨兵模式,自动版本的从库切换主库模式。

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个单独的进程,作为进程,他会独立运行。哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

哨兵在做什么?

  1. 发送命令
  2. 切换主机
  3. 注:多个哨兵监控Redis服务器(怕误判)

Redis缓存穿透和雪崩

缓存穿透

缓存中没有查到,向持久层(数据库)发出查询请求,发送请求的太多了就会给数据库造成很大的压力,这时候就相当于缓存穿透。

解决办法

  1. 布隆过滤器···布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合的则丢弃,从而避免持久层数据库的查询压力
  2. 缓存空对象···当存储层不命中后,及时返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护后端数据源(第二次以及后几次查询时,直接返回第一次保存的查询返回)

缓存击穿

一个key非常热点,在不断扛着大量并发,大并发集中对这个点进行访问,在这个key失效的瞬间,持续的大并发穿破缓存,直接请求数据库

解决办法

  1. 热点数据永不过期···不设置过期时间,就不会出现热点key过期后产生的问题
  2. 加互斥锁···使用分布式锁,保证对于每一个key来说同时只有一个线程去查询后端服务,等于把高并发的压力转移给了分布式锁,对于分布式锁的要求比较高

缓存雪崩

指在某一时间段内,缓存集中过期失效,或者Redis宕机,造成数据库的周期性压力波峰。

 致命的雪崩是缓存服务器的某个节点宕机或断网,对数据库服务器造成的压力是不可预估的,很有可能就把数据库压宕机

解决办法

  1. Redis高可用···多增设几台Redis,搭建缓存服务器集群
  2. 限流降级···加锁或者队列,转移压力
  3. 数据预热···给不同的key设置不同的过期时间,让缓存失效的时间点尽量均匀。

 

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

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

相关文章

冈萨雷斯DIP第8章知识点

8.1 基础 图像中的冗余 编码冗余:用于表示灰度的8比特编码所包含的比特数,要比表示该灰度所需要的比特数多。可通过变长编码来解决。 空间和时间冗余:与相邻像素相似(图像);时间:相邻帧中的像素(视频)。可以使用行程…

缺陷管理利器推荐:介绍几款好用的缺陷管理工具

缺陷管理是项目管理工作中的重要环节。Excel表格是国内团队常用的缺陷管理工具,具备上手容易,免费的优点,不过也存在协同不便,不易管理,效率低的不足之处。 一套缺陷管理工具可以帮助我们进行规范化自动化的缺陷管理&a…

LearnOpenGL-高级OpenGL-8.高级GLSL

本人初学者,文中定有代码、术语等错误,欢迎指正 文章目录 高级GLSLGLSL的内建变量在顶点着色器的内建变量gl_PointSizegl_VertexID 在片段着色器的内建变量gl_FragCoordgl_FrontFacinggl_FragDepth 接口块Uniform缓冲对象Uniform块布局使用Uniform缓冲简…

关于惠普M277打印机手动双面打印和自动双面打印设置

一.手动双面打印设置​​​​​​​ 1.键盘WINR,在运行框输入“control”,回车或者点击确定。 ​​​​​​​ 2.在控制面板找到设备和打印机,点击进去。 3.找到HP M277字样的打印机,右键选择打印机属性。 4.点击设…

有关部门信息表与员工信息表的常用SQL应用语句实现汇总

背景条件 已知有员工信息表(emp)和部门信息表(dept),具体表的信息如下: 员工信息表emp: 列名类型其他备注empnoDECIMAL(4)主键员工编号enameVARCHAR2(10)员工姓名jobVARCHAR2(9)工种mgrDECIM…

实现第一个内核程序的Hello World

背景 在内核的开发中,总要先入个门。那么就要来编写第一个内核程序 入门 一个 module_init 程序是Linux内核模块的一部分,通过module_init 方法就能将程序载入内核。 module_init 方法需要以下步骤 编写module_init 的代码,并将其保存为…

异常值检验、方差分析

异常值检验 T-test 参考:1.ttest和ttest2 区别 2. ttest在 matlab 3.T test分布表 方差分析(ANOVA) Def: 方差分析(analysis of variance, ANOVA)是一种统计检验,用于检验两组或更多组样本的均值是否相…

Allegro如何关闭出线自动拐弯功能操作指导

Allegro如何关闭出线自动拐弯功能操作指导 在用Allegro进行PCB设计的时候,对单个pin进行出线的时候,会遇到走线一出pin就会自动拐弯,并不会按照鼠标轨迹来设计,如下图 期望的效果如下图 如何关闭走线自动拐弯功能,具体操作如下 点击Route

django-vue-admin使用

一、源码地址 注意,一定要使用这个地址。(使用其他地址下载下来的感觉代码缺失,踩了大坑) django-vue-admin: 基于RBAC模型的权限控制的一整套基础开发平台,前后端分离,后端采用 djangodjango-rest-frame…

QT实现 WebsocketServer端与WebsocketClient 端通信

概 述 WebSockets 是一种通过单个 TCP 连接提供全双工通信信道的 web 技术。2011年,IETF 将 WebSocket 协议标准化为 RFC 6455 。Qt 提供的 QWebSocket 既可以用于客户端应用程序,也可以用于服务端应用程序,接口大部分和 QTcpSocket 一致。 …

R语言机器学习方法在生态经济学领域中的应用

近年来,人工智能领域已经取得突破性进展,对经济社会各个领域都产生了重大影响,结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一,目前也在飞快的融入计量经济学研究。表面上机器学习通常使用大数据&#xf…

MoviePy介绍

MoivePy是一个用于视频编辑的Python库,可以:剪切、拼接、标题插入、视频合成、视频处理和创建自定义效果。它支持Windows、Linux、Mac,源码地址:https://github.com/Zulko/moviepy,最新发布版本v1.0.3,lice…

Qt(C++)开发一款图片防盗用水印制作小工具

一、前言 文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文…

[小白教程] Javascript Callback以及Promise/async/await 一文通

一、最初 一切从 Javascript 是一门异步编程语言说起,比如这种最简单的: let n 0function f1() {setTimeout(function () {n}, 1000)}f1()console.log(n)可能直觉上会觉得最终n1,但实际上打印出来的是0,因为尽管调用了f1函数&am…

vue笔记——实现打印功能1

第一步:安装vue-print-nb,打开项目终端输入 npm install vue-print-nb --save 第二步:打开package.json文件,在dependencies中出现vue-print-nb,说明安装成功,如下图所示。 第三步: 方法一:全…

电子科技大学计算机系统结构复习笔记(二):指令系统

目录 前言 重点一览 指令集系统结构(ISA)的分类 分类依据 存储结构 区别 图示 通用寄存器系统结构分类 存储器寻址 概述 寻址方式 MIPS寻址模式 小结 操作数类型 指令操作 与指令编码 常用操作数类型 常用指令系统的操作 常用指令系统编…

【Pytorch基础教程40】DLRM推荐算法模型部署

note 文章目录 note一、DLRM模型1. 特征工程和embedding层2. butterfly shuffle3. 模型结构 二、模型部署Reference 一、DLRM模型 DLRM是2020年meta提出的工业界推荐算法模型,模型结构非常简单,也没用到什么attention机制等的东西,更多是注重…

权限维持-关于影子用户

前言 影子用户相信大家都是比较熟悉,是一种权限维持的好方法。 注:单机和域环境都可以使用,但是域中可能没有那么好用。 复现 一.本地 1. 正常的影子用户 我们在cmd命令中在生成用户时,在用户名后面加上$就可以 net user test$ …

【cfeng work】什么是SaaS? SaaS详细介绍

WorkProj 内容管理 SaaSSaaS的优势SaaS的注意项SaaS产品核心组件cfeng结合work理解SaaS 本文introduce SaaS的相关内容 昨天cfeng已经介绍过云原生了,其实就是应用在设计上就要围绕Cloud,代表技术就是容器化和微服务、DevOps和区别于传统瀑布模型的持续更…

【Linux】——多线程

目录 Linux线程概念 二级页表 线程的优点 线程的缺点 线程异常 线程的用途 Linux中的线程和进程 进程和线程 进程的多个线程共享 进程和线程的关系 Linux线程控制 POSIX线程库 线程创建 线程ID及地址空间布局 线程等待 线程终止 Linux线程概念 什…