java重点学习-redis

一.redis

穿透无中生有key,布隆过滤nul隔离

锁与非期解难题。缓存击穿过期key,

雪崩大量过期key,过期时间要随机。

面试必考三兄弟,可用限流来保底

1.1 Redis的使用场景

根据自己简历上的业务进行回答

·缓存穿透、击穿、雪崩、双写一致、持久化、数据过期、淘汰策略

分布式锁 setnx、redisson

总结

1.2 什么是缓存穿透,怎么解决

缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库

解决方案一:缓存空数据解决方案二:布隆过滤器

1.3.什么是缓存击穿

缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮

解决方案一:互斥锁,强一致,性能差

解决方案二:逻辑过期,高可用,性能优,不能保证数据绝对一致

1.4.什么是缓存雪崩

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

解决方案一:给不同的Key的TTL添加随机值

解决方案二:利用Redis集群提高服务的可用性

解决方案三:给缓存业务添加降级限流策略

解决方案四:给业务添加多级缓存

1.5 数据库和redis双写一致性如何保证?redis做为缓存,mysql的数据如何与redis进行同步呢?

介绍自己简历上的业务,我们当时是把文章的热点数据存入到了缓存中,虽然是热点数据,但是实时要求性并没有那么高,所以,我们当时采用的是异步的方案同步的数据

我们当时是把抢券的库存存入到了缓存中,这个需要实时的进行数据同步,为了保证数据的强一致,我们当时采用的是redisson提供的读写锁来保证数据的同步

那你来介绍一下异步的方案(你来介绍-下redisson读写锁的这种方案)

---允许延时一致的业务,采用异步通知

a.使用MQ中间中间件,更新数据之后,通知缓存删除

b.利用canal中间件,不需要修改业务代码,伪装为mysql的一个从节点,canal通过读取binlog数据更新缓存

---强一致性的,采用Redisson提供的读写锁

a.共享锁:读锁readLock,加锁之后,其他线程可以共享读操作

b.排他锁:也叫独占锁writeLock,加锁之后,阻塞其他线程读写操作

1.6 redis持久化

1.7 Redis的数据过期策略

惰性删除:访问key的时候判断是否过期,如果过期,则删除

定期删除:定期检查一定量的key是否过期(SLOW模式+FAST模式)

Redis的过期删除策略:惰性删除+定期删除两种策略进行配合使用

 redis的淘汰策略有哪些

数据淘汰策略

  • Redis提供了8种不同的数据淘汰策略,默认是noeviction不删除任何数据,内存不足直接报错
  • LRU:最少最近使用。用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。
  • LFU:最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高

平时开发过程中用的比较多的就是alkeys-lru(结合自己的业务场景)

1.8 redis分布式锁,是如何实现的?

先按照自己简历上的业务进行描述分布式锁使用的场景

我们当使用的redisson实现的分布式锁,底层是setnx和lua脚本(保证原子性)

Redisson实现分布式锁如何合理的控制锁的有效时长?

在redisson的分布式锁中,提供了一个WatchDog(看门狗),一个线程获取锁成功以后WatchDog会给持有锁的线程续期(默认是每隔10秒续期一次)

Redisson的这个锁,可以重入吗?

可以重入,多个锁重入需要判断是否是当前线程,在redis中进行存储的时候使用的hash结构来存储线程信息和重入的次数

Redisson锁能解决主从数据一致的问题吗

不能解决,但是可以使用redisson提供的红锁来解决,但是这样的话,性能就太低了,如果业务中非要保证数据的强一致性,建议采用zookeeper实现的分布式锁

1.9 redis的主从同步

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离-般都是一主多从,主节点负责写数据,从节点负责读数据

能说一下,主从同步数据的流程

全量同步:

1.从节点请求主节点同步数据(replication id、offset )

2.主节点判断是否是第一次请求,是第一次就与从节点同步版本信息(replication idoffset)

3.主节点执行bgsave,生成rdb文件后,发送给从节点去执行

4.在rdb生成执行期间,主节点会以命令的方式记录到缓冲区(一个日志文件)

5.把生成之后的命令日志文件发送给从节点进行同步

增量同步:

1.从节点请求主节点同步数据,主节点判断不是第一次请求,不是第一次就获取从节点的offset值

2.主节点从命令日志中获取offset值之后的数据,发送给从节点进行数据同步

1.10 怎么保证Redis的高并发高可用(redis哨兵集群)

哨兵模式:实现主从集群的自动故障恢复(监控、自动故障恢复、通知)

你们使用redis是单点还是集群,哪种集群

主从(1主1从)+哨兵就可以了。单节点不超过10G内存,如果Redis内存不足则可以给不同服务分配独立的Redis主从节点

redis集群脑裂,该怎么解决呢?

集群脑裂是由于主节点和从节点和sentinel处于不同的网络分区,使得sentinel没有能够心跳感知到主节点,所以通过选举的方式提升了一个从节点为主,这样就存在了两个master,就像大脑分裂了一样,这样会导致客户端还在老的主节点那里写入数据,新节点无法同步数据,当网络恢复后,sentinel会将老的主节点降为从节点,这时再从新master同步数据,就会导致数据丢失

解决:我们可以修改redis的配置,可以设置最少的从节点数量以及缩短主从数据同步的延迟时间,达不到要求就拒绝请求就可以避免大量的数据丢失

1.11 redis的分片集群有什么作用

a.集群中有多个master,每个master保存不同数据

b.每个master都可以有多个slave节点

c.master之间通过ping监测彼此健康状态1

d.客户端请求可以访问集群任意节点,最终都会被转发到正确节点

Redis分片集群中数据是怎么存储和读取的?

Redis 分片集群引入了哈希槽的概念,Redis 集群有 16384 个哈希槽

将16384个插槽分配到不同的实例

读写数据:根据key的有效部分计算哈希值,对16384取余(有效部分,如果key前面有太括号,大括号的内容就是有效部分,如果没有,则以key本身做为有效部分)余数做为插槽,寻找插槽所在的实例

1.12 能解释-下redis中的 I/O多路复用模型?

1.I/0多路复用

是指利用单个线程来同时监听多个Socket ,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。目前的I/0多路复用都是采用的epoll模式实现,它会在通知用户进程Socket就绪的同时,把已就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪,提升了性能。

2. Redis网络模型

就是使用I/0多路复用结合事件的处理器来应对多个Socket请求

> 连接应答处理器

>命令回复处理器,在Redis6.0之后,为了提升更好的性能,使用了多线程来处理回复事件上

>命令请求处理器,在Redis6.0之后,将命令的转换使用了多线程,增加命令转换速度,在命令执行的时 候,依然是单线程

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

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

相关文章

实验报告: lookie-lookie 项目测试与分析

目录 一、实验目的 二、实验环境 三、实验步骤 1. 下载与准备项目 1.1 从 GitHub 获取项目 1.2 查看项目文件结构 2. 运行项目 2.1 启动项目 2.2 浏览器设置 3. 项目体验 3.1 功能测试 3.2 运行截图 4. 文件结构分析 4.1 总体结构 4.2 主要文件和目录说明 5. 数…

重头开始嵌入式第三十二天(TCP多客户端模型)

1.多路IO 1.select #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netine…

基于人体关节夹角的人体动作识别算法(代码+数据集)

为此本文提出了一个基于人体关节夹角的人体动作识别算法&#xff0c;主要做了以下工作&#xff1a; &#xff08;1&#xff09;提出了一个可解释性强&#xff0c;耗费算力较少且鲁棒性较高的基于人体关节夹角的人体动作序列的特征抽取方法。 &#xff08;2&#xff09;本文所使…

PCL 移动立方体三维重建——RBF算法【2024最新版】

目录 一、算法原理1、算法概述2、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接,首发于:2024年9月1日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法概述 该算法实现的是Reconstruction a…

单片机配置导入导出功能设计(一种思路)

背景&#xff1a; 为了方便部分不开放到屏幕的配置进行修改&#xff0c;兼容离线机器&#xff0c;也支持产线大批量配置导入&#xff0c;提高生产效率&#xff0c;特此研发配置导入导出功能。 原理&#xff1a; 上电监测到U盘和文件系统正常后&#xff0c;监测是否存在配置文件…

贸易术语你都不懂,你还做什么外贸

外贸小伙伴们&#xff0c;连贸易术语都不懂&#xff0c;还做啥外贸&#xff1f;别担心&#xff0c;今天我给大家整理了常见的外贸贸易术语&#xff0c;让你轻松入门&#xff0c;快速上手&#xff01; 1、FOB: Free On Board 船上交货价。按离岸价进行的交易&#xff0c;买方…

Java并发线程 共享模型之管程 5

1. 生产者消费者 package cn.itcast.testcopy;import cn.itcast.n2copy.util.Sleeper; import lombok.extern.slf4j.Slf4j;import java.util.LinkedList;/*** ClassName: Test21* Package: cn.itcast.testcopy* Description: 生产者消费者** Author: 1043* Create: 2024/9/4 - …

软件测试之压力测试知识总结

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 压力测试 压力测试是一种软件测试&#xff0c;用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…

Vue 3 的性能提升具体体现在哪些方面?

Vue 3 的性能提升体现在多个方面&#xff0c;以下是一些具体的例子&#xff1a; 基于 Proxy 的响应式系统&#xff1a; Vue 2 使用 Object.defineProperty 来实现响应式数据绑定&#xff0c;这种方式在处理数组或添加新的属性时存在局限性。Vue 3 引入了基于 Proxy 的响应式系统…

Android 获取通话记录

在某些App的开发者&#xff0c;获取通话记录有时候是必要的&#xff08;现在都要申请相对于权限哦&#xff0c;App上架得说明为啥获取此权限&#xff09;。 因为工作风控数据收集经常会用到&#xff0c;在此做个总结。 大致步骤 1.权限声明 2.申请权限 3.获取通话记录 4.…

LNMP环境搭建(Linux+nginx+Mysql+PHP)超详细攻略

目录 一.LNMP简介 1.1LNMP架构的特点 二.详细安装步骤 2.1MySQL安装 2.1-1Yum安装 2.1-2 编译安装 2.1-3二进制安装 2.1-4 RPM安装 2.2Nginx安装 2.2-1编译安装nginx 2.2-2yum安装nginx 2.3验证Nginx安装 2.4PHP安装 2.4-1编译安装PHP 2.4-2yum安装PHP 2.5 Nginx 配…

PMP–一、二、三模、冲刺、必刷–分类–14.敏捷–技巧--累积流图

文章目录 技巧一模二模三模14.敏捷–敏捷团队的衡量结果–累积流图&#xff1a;1、 敏捷项目的项目经理担心团队在最近的迭代中失去了动力。项目经理应该使用哪两种工具来分析团队绩效&#xff1f;&#xff08;选择两个&#xff09; 冲刺必刷7.成本管理--挣值分析燃尽图仅能了解…

Android --- observer和observerForever的区别

observe 和 observeForever 是 LiveData 中的两个方法&#xff0c;用于观察数据的变化&#xff0c;但它们在生命周期管理和适用场景上有区别&#xff1a; ---->observe: 用途: 注册一个观察者&#xff0c;该观察者在 LifecycleOwner&#xff08;如 Activity 或 Fragment&am…

From Man vs Machine to Man + Machine

From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 文章目录 From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 AbstractConstruction and Performance of the AI AnalystMethodologyThe Performance of Ana…

一款用于分析java socket连接问题的工具

network-tools 介绍 network-tools基于sun jdk、Oracle jdk开发&#xff0c;拦截基于java socket请求&#xff0c;它包括 ​ http 客户端 ​ jdbc 客户端 ​ mq 客户端 ​ redis 客户端 目前提供如下功能&#xff1a; ​ 最近端点连接情况 ​ 最近与远程端点连接情况&am…

【Windows】【C++】【Udp】 udp通信协议详解和示例

在 Windows 平台上&#xff0c;使用 C 实现的 UDP 通信服务器和客户端示例代码稍有不同&#xff0c;因为 Windows 使用 Winsock API 进行网络编程。下面是一个简单的 UDP 服务器和客户端的实现示例&#xff0c;包括详细的代码和说明。 UDP 服务器代码示例&#xff08;Windows&…

Mybatis分页查询主从表

先主查询&#xff0c;再关联子查询&#xff0c;不影响分页效果&#xff0c;否则子查询也会参与分页。 <resultMap id"Hdr" type"com.Hdr"><id column"crh_id" property"id" javaType"int"/><collection prop…

计算机网络 第1章 概述

文章目录 计算机网络概念计算机网络的组成计算机网络的功能三种数据交换技术电路交换&#xff08;Circuit Switching&#xff09;报文交换&#xff08;message&#xff09;分组交换 三种交换方式性能对比计算机网络的分类计算机网络的性能指标性能指标1&#xff1a;速率性能指标…

【优化】Nginx 配置页面请求不走缓存 浏览器页面禁用缓存

【优化】Nginx 配置页面请求不走缓存 禁用缓存 目录 【优化】Nginx 配置页面请求不走缓存 禁用缓存 对所有请求禁用缓存 对特定location禁用缓存 注意事项 全局禁用缓存 要配置Nginx使其不缓存内容&#xff0c;通常是指禁止浏览器缓存响应的内容&#xff0c;或者是在代理…