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.需求 我们先看需求:小球在窗体内运动,撞到除…

从入门到精通:详解Linux环境基础开发工具的使用

前言 在这篇文章中,我将深入学习和理解Linux环境基础开发工具的使用。无论你是初学者还是有一定经验的开发者,相信这篇文章都会对你有所帮助。我们将详细讲解软件包管理器、编辑器、编译器、调试器、自动化构建工具以及版本控制工具的使用。 Linux软件…

后端数据库开发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;在通知方面带来了诸多…

Rom应用开发遇到得一些小bug

记录一些细碎得bug ROM时间类问题 问题描述&#xff1a; 设备拔电重启&#xff0c;ROM时间为默认时间如1970年1月1日&#xff0c;与某些业务场景互斥 问题原因&#xff1a; 后台接口校验https证书校验失败&#xff0c;要求是2年内得请求头校验了时间戳&#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。…

基于springboot图书个性化推荐系统源码数据库

基于springboot图书个性化推荐系统源码数据库 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述图…

K8s 运维架构师实战课程

阿良课程收益 掌握Kubernetes企业运维管理 掌握部署、运维、存储、网络、监控、日志、CICD、服务网格等实战全面搞定&#xff01; 独立将公司任何项目容器化迁移到K8s平台 生产环境真实案例 大厂企业实战经验 学习最新版、最佳实践 K8s 运维架构师实战【初中级】&#xff1a;ht…

docker 方式gost代理搭建以及代理链实施

一、项目地址&#xff1a;https://github.com/ginuerzh/gost 二、实施 环境信息 主机名公网IP地址内网IP地址角色beijing101.200.xxx.xxx192.168.0.160单层代理serverbeijing101.200.xxx.xxx192.168.0.160链式代理下游serverhk47.238.xxx.xxx172.31.94.207链式代理上游serve…

linux误删crontab定时任务后的补救措施(随手记)

起因 想看一眼定时任务的时候&#xff0c;手误打成了-r&#xff0c;接着我的定时任务就全没了…… 补救措施 我们都知道&#xff0c;crontab的几个关键目录中有一个是/var/log/cron&#xff0c;这个目录记录了crontab执行的日志。 如果平时没有备份crontab的习惯的话&#x…

【MySQL精通之路】InnoDB-内存结构-自适应哈希索引

1.作用 自适应哈希索引使InnoDB能够在具有适当的工作负载组合和足够的缓冲池内存的系统上执行更像内存中的数据库&#xff0c;而不会牺牲事务特性或可靠性。 2.设置 自适应哈希索引由innodb_adaptive_hash_index变量启用 或在服务器启动时由--skip-innodb-adaptive-has…

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;点击【浏览】选择安装路径 点击【浏览】选择前…

鸿蒙应用开发系列 篇三:ArkTS语言

文章目录 系列文章概述基本语法基本结构概念释疑声明式UI描述高级特性自定义组件页面和自定义组件生命周期状态管理渲染控制ArkTS语言基础类库系列文章 鸿蒙应用开发系列 篇一:鸿蒙系统概述 鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环境

(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 中的 FormField 小部件:全面指南

Flutter 中的 FormField 小部件&#xff1a;全面指南 在Flutter的世界里&#xff0c;表单是用户输入数据的基本方式之一。FormField是一个强大的小部件&#xff0c;它将表单字段的创建、验证和管理集成到了一个易于使用的抽象中。本文将为您提供一个全面的指南&#xff0c;帮助…

AWS安全性身份和合规性之AWS Firewall Manager

AWS Firewall Manager是一项安全管理服务&#xff0c;可让您在AWS Organizations中跨账户和应用程序集中配置和管理防火墙规则。在创建新应用程序时&#xff0c;您可以借助Firewall Manager实施一套通用的安全规则&#xff0c;更轻松地让新应用程序和资源从一开始就达到合规要求…