Redis数据库知识点

Redis

set get del keys

redis中有哪些数据类型

string

最大512m

key层级

redis的key允许有多个单词形成层级结构,多个单词之间用‘:’隔开

set get del keys

hash

本身在redis中存储方式就为key-value, 而hash数据结构中value又是一对key-value

hset key field value

hget key field

hdel

hkeys

list

双向链表,元素可重复

lpush key element

lpop key 

rpush  key element

rpop key

lrange key start end

set

底层是hash表

无序,不可重复

查找快,支持交际并集差集等集合操作

SADD key member

SREM key member

SISMEMBER

SMEMBERS

SINTER key1 key2 交集

SDIFF key1 key2 差集

SUNION key1 key2 并集 

sorted set

底层是跳表+hash表

sorted中每个元素都带score属性,根据score属性排序

特点:可排序,元素不可重复,查询速度快

ZADD key score member

ZREM ket member

ZDIFF,ZINTER,ZUNION:求差集,交集,并集

持久化是什么,持久化aof和rdb

redis是基于内存的,因此如果遭遇断电的情况,会导致数据丢失,这对一个数据库而言是致命的

持久化就是指将Redis服务器中的数据保存到磁盘上,以防止数据在服务器重启或宕机时丢失。

redis有两种方式保障数据,一个是rdb(redis database),另一个是aof(Append only file)

rdb是每隔一定的时间间隔,对数据库进行一次快照,并保存至磁盘中

aof是在执行写命令是,不仅会将数据写入到内存中,还会将写操作追加到aof文件中,它会以日志的形式来记录每一个写操作,在redis重启后,通过重新执行aof文件中的命令,来恢复数据

缓存穿透,缓存击穿,缓存雪崩

缓存穿透、缓存击穿和缓存雪崩是三种常见的缓存相关问题,它们有着不同的特点和原因:

1、缓存穿透是指,客户端查询到了根本不存在的数据,使得这个请求直达存储层,导致负载过大造成数据库宕机。2、缓存击穿主要是指一个非常大的热点数据缓存失效导致所有请求直达存储层,导致服务崩溃。3、缓存雪崩是指某一时刻缓存层无法继续提供服务,导致所有请求直达存储层,造成数据库宕机。
 

  1. 缓存穿透(Cache Penetration)

    • 定义:缓存穿透是指恶意用户或者非法请求频繁访问缓存中不存在的数据,导致这些请求直接穿透缓存层,直接访问后端存储系统。
    • 原因:通常是因为用户查询了不存在的数据,或者攻击者故意发起恶意请求。这种情况下,每次请求都会直接访问后端存储系统,造成系统资源浪费和性能下降。
    • 解决方案:可以通过在缓存层增加布隆过滤器等机制来过滤掉不存在的请求,或者在后端存储系统中添加空值缓存来防止穿透。
  2. 缓存击穿(Cache Breakdown)

    • 定义:缓存击穿是指某一个热点数据突然失效或者被删除,导致大量的请求直接访问后端存储系统,造成后端存储系统负载剧增和性能下降的情况。
    • 原因:通常是因为某一个热点数据的缓存失效了,或者缓存设置了较短的过期时间。当大量请求同时到达时,会直接访问后端存储系统,造成击穿现象。
    • 解决方案延长热点数据缓存时间:针对热点数据,可以将其缓存设置为永久有效,或者设置一个较长的过期时间,以减少因缓存失效而导致的击穿问题。                                 加锁:在缓存失效时,可以使用分布式锁等机制来避免同时访问后端存储系统,从而降低因击穿而导致的请求压力。
  3. 缓存雪崩(Cache Avalanche)

    • 定义:缓存雪崩是指缓存中的大量数据同时失效,导致大量请求直接访问后端存储系统,造成后端存储系统负载剧增和性能下降的情况。
    • 原因:通常是因为缓存中的数据过期时间设置过于集中,或者缓存服务器故障等原因导致大量缓存同时失效。当大量请求同时到达时,会直接访问后端存储系统,造成雪崩现象。
    • 解决方案随机过期时间:对缓存中的数据设置随机的过期时间,可以避免大量缓存同时失效,从而减少缓存雪崩的发生。                                                                             热点数据预热:在缓存中预先加载热点数据,可以避免因缓存失效而导致的大量请求直接访问后端存储系统。可以通过定时任务或者手动触发的方式进行热点数据的预热。

redis 为什么读取速度那么块

Redis 读取速度快的主要原因有以下几点:

  1. 内存存储:Redis 将数据存储在内存中,读取数据时直接从内存中获取,而不需要像传统数据库一样进行磁盘 I/O 操作,因此读取速度非常快。

  2. 单线程模型:Redis 使用单线程模型来处理客户端请求,避免了多线程之间的上下文切换和锁竞争,提高了读取速度。

  3. 非阻塞 I/O:Redis 使用非阻塞 I/O 处理网络请求,当客户端发起读取请求时,Redis 会立即返回数据,而不需要等待数据读取完成,进一步提高了读取速度。

  4. 高效的数据结构:Redis 提供了丰富而高效的数据结构,如字符串、哈希、列表、集合、有序集合等,这些数据结构的实现都经过了优化,能够在内存中高效存储和访问数据。

  5. 事件驱动:Redis 使用事件驱动模型处理客户端请求,采用事件循环机制监听和处理事件,避免了线程阻塞和等待,提高了系统的并发处理能力和读取速度。

  6. 预编译指令:Redis 采用了预编译的方式处理客户端请求,将一些常用的操作编译成底层的指令,减少了解析和执行的时间,提高了读取速度。

为什么redis6.0要引入多线程

Redis 6.0引入多线程主要是为了提高性能和利用多核处理器的能力。在传统的Redis版本中,采用单线程的事件循环模型,这意味着无法充分利用多核处理器的优势

通过引入多线程,Redis可以将工作负载分布到多个线程上,从而更好地利用多核处理器的能力。这样可以提高Redis在多核处理器上的并发性能和吞吐量,使其更适合处理大规模的并发请求。

在Redis 6.0中,引入了多线程处理网络 I/O 操作,但主要的数据处理仍然是在单线程中完成的。这种设计被称为“多线程非阻塞 I/O”。

在这种模型下,Redis的主线程仍然负责执行命令的解析、执行以及数据处理等核心任务,而多个 I/O 线程负责处理网络 I/O 操作,如接受新的客户端连接、读取和写入数据等。这样可以在一定程度上提高网络 I/O 的并发处理能力,减少了主线程在等待 I/O 完成时的空闲时间,从而提升了整体的性能表现。

采用多线程处理网络 I/O 操作的好处在于可以更充分地利用多核处理器的优势,提高了 Redis 在处理大量并发连接时的性能表现。同时,这种设计也避免了传统多线程模型中因线程切换而带来的额外开销和复杂性。

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

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

相关文章

【easyx】快速入门——弹球小游戏(第一代)

目录 1.需求 2.运动的小球 3.碰到边缘反弹 4.圆周撞击或越过边界反弹 5.绘制和移动挡板 6.小球碰到挡板反弹 7.游戏失败时该如何处理 8.随机初始条件 9.完整代码 我们这一节将结合动画和键盘交互的知识来做一个小游戏 1.需求 我们先看需求:小球在窗体内运动,撞到除…

后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操

之前的SQL语句是基于注解 以后开发中一般是一个接口对应一个映射文件 书写映射文件 基本结构 框架 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.or…

尽在掌握:Android 13 通知新功能详解

尽在掌握&#xff1a;Android 13 通知新功能详解 在移动应用开发中&#xff0c;通知扮演着至关重要的角色&#xff0c;它如同应用程序与用户之间的桥梁&#xff0c;及时传递关键信息&#xff0c;提升用户体验。Android 13 作为最新的安卓版本&#xff0c;在通知方面带来了诸多…

QLExpress入门及实战总结

文章目录 1.背景2.简介3.QLExpress实战3.1 基础例子3.2 低代码实战3.2.1 需求描述3.2.1 使用规则引擎3.3.2 运行结果 参考文档 1.背景 最近研究低代码实现后端业务逻辑相关功能&#xff0c;使用LiteFlow作为流程编排后端service服务, 但是LiteFlow官方未提供图形界面编排流程。…

使用RAG和文本转语音功能,我构建了一个 QA 问答机器人

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

代码随想录算法训练营第36期DAY37

DAY37 先二刷昨天的3道题目&#xff0c;每种方法都写&#xff1a;是否已完成&#xff1a;是。 报告&#xff1a;134加油站的朴素法没写对。原因是&#xff1a;在if中缺少了store>0的判断&#xff0c;只给出了indexi的判断。前进法没写出来。因为忘记了总油量的判断。Sum。…

VMware 安装Windows Server 2008 R2

1.下载镜像 迅雷&#xff1a;ed2k://|file|cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso|3368839168|D282F613A80C2F45FF23B79212A3CF67|/ 2.安装过程 自定义名字&#xff0c;点击【浏览】选择安装路径 点击【浏览】选择前…

(Oracle)SQL优化基础(三):看懂执行计划顺序

往期内容&#xff1a; &#xff08;Oracle&#xff09;SQL优化基础&#xff08;一&#xff09;&#xff1a;获取执行计划 &#xff08;Oracle&#xff09;SQL优化基础&#xff08;二&#xff09;&#xff1a;统计信息 获取到执行计划后&#xff0c;对于新手朋友来讲可能不知道…

Qt笔记:动态处理多个按钮点击事件以更新UI

问题描述 在开发Qt应用程序时&#xff0c;经常需要处理多个按钮的点击事件&#xff0c;并根据点击的按钮来更新用户界面&#xff08;UI&#xff09;&#xff0c;如下图。例如&#xff0c;你可能有一个包含多个按钮的界面&#xff0c;每个按钮都与一个文本框和一个复选框相关联…

基于springboot+vue+Mysql的逍遥大药房管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【flutter】 Running Gradle task ‘assembleDebug‘...超时问题

关联搜索&#xff1a;flutter下载gradle失败、AndroidStudio下载gradle失败 构建Flutter项目时遇到控制台一直卡在 Running Gradle task ‘assembleDebug’… 解决方案 1. 修改gradle-wrapper.properties 文件 如果找不到就直接搜索&#xff1a; 把https\://services.gradl…

vscode更改语言,记录一下

首先打开安装好的Vscode软件&#xff0c;可以看到页面上显示的是英文效果。 同时按键ctrlshiftp&#xff0c;接着在输入框中输入 configure Display language如图&#xff1a; 选择中文简体就ok了&#xff0c;如果没有则安装 chinese Language pack

vue3 ElementUI 日期禁选当日前, 当日后,几天后,几天前(例如3天后)

今日之前禁用 代码: ( 主要是 :disabledDate“disabledDateFun” ) <el-date-picker v-model"queryForm.selectedDate"type"date"range-separator"-"placeholder"选择日期":disabledDate"disabledDateFun" clearable /&…

前端面试:项目细节重难点问题分享

面试官提问&#xff1a;我现在给你出一个项目实际遇到的问题&#xff1a;由于后端比较忙&#xff0c;所以我们这边的列表数据排序需要前端最近实现&#xff0c;那你会怎么实现排序呢&#xff1f; 答&#xff1a;我的回答&#xff1a;确实&#xff0c;数据都是由后端实现的&…

基于MetaGPT构建单智能体

前言 在之前的文章中&#xff0c;我们详细地描述了Agent的概念和组成&#xff0c;在代码案例中体验了Agent的记忆、工具、规划决策模块&#xff0c;并通过几个Agent框架来加强读者对Agent开发设计与应用的理解&#xff0c;接下来我们就要进入智能体Agent的实际开发中&#xff0…

教师专属的成绩发布小程序

还在为成绩发布而烦恼&#xff1f;还在担心家长无法及时获得孩子的学习反馈&#xff1f;是否想要一个既安全又高效的工具来简化你的教学工作&#xff1f;那么&#xff0c;易查分小程序可能是你一直在寻找的答案。 现在的老师们有了超多的工具来帮助我们减轻负担&#xff0c;提高…

多式联运奇迹:探索 GPT-4o 的尖端功能

取得的显着进展的DigiOps与人工智能已经标志着重要的里程碑&#xff0c;随着时间的推移塑造了人工智能系统的能力。从早期基于规则系统的出现机器学习和深入学习&#xff0c;人工智能已经发展得更加先进和通用。 生成式预训练 Transformer (GPT) by OpenAI 已特别值得注意。每…

微服务远程调用 RestTemplate

Spring给我们提供了一个RestTemplate的API&#xff0c;可以方便的实现Http请求的发送。 同步客户端执行HTTP请求&#xff0c;在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模…

Algoriddim djay Pro Ai for Mac:AI引领,混音新篇章

当AI遇上音乐&#xff0c;会碰撞出怎样的火花&#xff1f;Algoriddim djay Pro Ai for Mac给出了答案。这款专业的DJ混音软件&#xff0c;以AI为引擎&#xff0c;引领我们进入混音的新篇章。 djay Pro Ai for Mac的智能混音功能&#xff0c;让每一位DJ都能感受到前所未有的创作…

计算机系统基础 7 分支程序的实现

简单条件转移指令 根据单个标志位的值&#xff08;CF&#xff0c; SF&#xff0c;OF&#xff0c;PF&#xff0c;ZF&#xff09;来确定是否转移&#xff0c; 如果条件成立&#xff0c;则&#xff08;EIP&#xff09; 位移量 ➡ EIP&#xff0c;否则什么也不做。 注意&#xff0…