Redis-Mysql八股总结

news2025/7/5 13:05:06

Redis

说一下 Redis以及Redis 使用场景

答:Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存消息队列分布式锁等场景

Redis 设置过期时间的命令

# 设置 key 在 60 秒后过期(该方法是针对已经存在的key设置过期时间)一般不常用
expire key 60
# setex key 时间 value--设置key = name value = lisi ,60秒过期
setex name 60 lisi 
set name lisi ex 60

分布式锁

答:Redis中可以用setnx设计分布式锁,为什么呢?因为setnx key value 只有当key不存在时候才会建立。但是在实际中常常如下命令创建分布式锁。

set key value nx ex 时间

为什么是这样呢?

  • 我们想一下,nx表示当键不存在时候才会创建,如果有线程1已经创建了锁,那么线程2,或者线程3执行这个命令就会失败。因此会获得不到锁对象。
  • 设置锁过期时间是防止锁没有及时释放,其他线程或系统获取不到锁。

设计锁时要注意一些问题:

第一这个value是全局唯一的。是为了防止误删现象。

  • 假如有线程1,获取了锁对象,在执行业务时被阻塞了,此时锁的时间过期了。
  • 那么线程2 就可以获取锁对象,此时,线程1完成业务,(如果value不是全局唯一)那么线程1直接将锁释放,后来线程3,线程4。。就可以并发执行出现并发安全问题。
  • 因此,我们设置全局唯一value值,在释放锁时要判断value值是不是自己的然后才进行释放。

第二锁释放要设置为原子性操作。为什么要这样呢?

如下图代码所示:判断value值是否是自己的,然后才进行锁释放操作。


public void unlock() {
    // 获取线程标示
    String threadId = ID_PREFIX + Thread.currentThread().getId();
    // 获取锁中的标示
    String id = stringRedisTemplate.opsForValue().get(KEY_PREFIX + name);
    // 判断标示是否一致
    if(threadId.equals(id)) {
        // 释放锁
        stringRedisTemplate.delete(KEY_PREFIX + name);
    }

 因此要采用Lua脚本实现原子操作。

-- 这里的 KEYS[1] 就是锁的key,这里的ARGV[1] 就是当前线程标示
-- 获取锁中的标示,判断是否与当前线程标示一致
if (redis.call('GET', KEYS[1]) == ARGV[1]) then
  -- 一致,则删除锁
  return redis.call('DEL', KEYS[1])
end
-- 不一致,则直接返回
return 0

具体请看黑马点评项目Redis实现分布式锁_兜兜转转m的博客-CSDN博客

业务里 redis 的过期策略设置

你的 redis 的使用场景

dis 的淘汰策略

你的使用场景 redis 宕机了怎么办

MySQL

Mysql 查询(出生日期,性别)在表(id,性别,年龄,出生日期)中怎么设置索引。

mysql 索引怎么选择?索引的优缺点?还有什么缺点 或者讲一下索引的你的理解

索引失效的场景、场景题的索引设计

这两个题是一个类型题,我就一起说了。

出生日期是非唯一索引,性别只有:男,女,其区分度不高,因此我们最不好不对其建立索引。

答:一般常用在where, orderby, group by字段进行索引设置,我们常见的索引一般是,主键索引,唯一索引和普通索引,其优点在于提升数据库对数据的查询速度,缺点是占用存储空间,而且会影响insert,update,delete的速度。但是索引并不是简简单单设置一下就好了,它也有相应的使用规则,否则其失效。

  • 要遵循最左前缀法则,否则会索引会失效
  • 在条件判断时索引字段不能作为函数的参数
  • 索引字段不能进行类型转换。
  • 使用<>查询是后面索引会失效。
  • 当索引列模糊查询进行模糊头查询时。
  • 在联合索引下,遵循最左前缀准则,而且不能跳过,如果跳过会引起部分索引失效。
  • or连接条件:用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会 被用到
  • 数据查询分布不均匀时

具体参考MySQL进阶-索引生效和设计的原则总结_兜兜转转m的博客-CSDN博客​​​​​​​

sql 事务的特性?什么是持久性

答:事务的特性主要有4个,也是我们常说的ACID,对应的是原子性,一致性,隔离性和持久性。

持久性:表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备

持久性的实现主要是通过redo log保证的。

redo log是Innodb引擎特有的,其主要分为日志缓存区和日志文件两部分组成,前部分是在于内存中后部分在于磁盘中。它记录的是一条更新操作所做的修改,其修改的数据都会存放在日志缓存区中,当事务提交时将redolog中的数据刷入磁盘中。

MyISAM 与 InnoDB 的区别

 

数据库隔离级别

答:MySQL的隔离级别主要有4个,读未提交,读已提交,可重复读,串行读等。

读已提交可以解决脏读问题,可重复读可以解决不可重复读问题,串行读可以解决幻读问题。

  • “脏读”指读到了未提交的数据,然后基于这个数据做了一些事情,结果做完发现数据被回滚了。
  • 不可重复读问题是,首先我们读取一条数据,然后我们再次读取这条数据时发现改数据已经被修改了(侧重点在修改)。
  • 幻读:当某个事务在读取某个范围内的记录时,另一个事务又在该记录插入了新数据,当前事务再次读取这个范围的记录,会产生幻读行。

oss 数据库与 mysql 数据库不一致怎么解决

同一条 sql,不同规模数据会走同一条索引吗

答:不会,因为索引的失效原因有一条是:数据查询分布不均匀会导致索引失效。

为何会这样呢?因为MySQL优化器会评估使用索引的效率与走全表扫描的效率,如果走全表扫描更快,则放弃索引,走全表扫描。

索引是用来索引少量数据的,如果通过索引查询返回大批量的数据,则还不 如走全表扫描来的快,此时索引就会失效。

select * from tb_user where phone >= '17799990005';
select * from tb_user where phone >= '17799990015';

mySQL 死锁怎么解决?mySQL 不能解决死锁的原因

死锁如何发生呢?

假设这时有两事务,一个事务要插入订单 1007 ,另外一个事务要插入订单 1008,因为需要对订单做幂等性校验,所以两个事务先要查询该订单是否存在,不存在才插入记录,过程如下:

两个临键锁相互锁住了对方,都在等对方释放。可以看到,两个事务都陷入了等待状态(前提没有打开死锁检测),也就是发生了死锁,因为都在相互等待对方释放锁。

 因为当我们执行以下插入语句时,会在插入间隙上获取插入意向写锁而插入意向锁与间隙锁是冲突的,所以当其它事务持有该间隙的间隙锁时,需要等待其它事务释放间隙锁之后,才能获取到插入意向锁。而间隙锁与间隙锁之间是兼容的,所以所以两个事务中 select ... for update 语句并不会相互影响

如何避免死锁

死锁的四个必要条件:互斥、占有且等待、不可强占用、循环等待。只要系统发生死锁,这些条件必然成立,但是只要破坏任意一个条件就死锁就不会成立。

  • 设置事务等待锁的超时时间:一个事务的等待时间超过该值后,就对这个事务进行回滚,于是锁就释放了,另一个事务就可以继续执行了
  • 开启主动死锁检测。主动死锁检测在发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect 设置为 on,表示开启这个逻辑,默认就开启

参考:

MySQL 死锁了,怎么办? | 小林coding

慢 sql 优化

1、先检测出慢sql。

2、分析因为什么慢

具体:针对insert,order by,limit,update,conut,group by

MySQL进阶-SQL优化_兜兜转转m的博客-CSDN博客 

综合问题

如何保证数据库和Redis的一致性问题。

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

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

相关文章

上网行为监控都能审计到哪些内容?

现在很多企业都部署了上网行为监控系统&#xff0c;那么&#xff0c;它可以审计到哪些内容呢&#xff1f;目前市面上有不同种类的上网行为监控系统&#xff0c;其功能都是大同小异的&#xff0c;这里我们以墨门云为例&#xff0c;了解一下装了这个软件之后管理者可以审计到哪些…

WPF探究【一】

文章目录WPF的概述&#xff1a;控件分类XAML对象元素语法XAML根元素WPF和XAML命名空间声明控件Lablel示例继承关系TextBlockbuttonBorderWPF的概述&#xff1a; WindowsPresentationFoundation&#xff08;简称WPF&#xff09;WPF的核心是一个与分辩率无关且基于实量的呈现引擎…

【深入理解Kotlin协程】使用Job控制协程的生命周期

Job 是协程上下文CoroutineContext的实现之一&#xff0c;通过它我们可以对协程的生命周期进行一些控制操作。Job 是协程的句柄。使用 launch 或 async 创建的每个协程都会返回一个 Job 实例对象&#xff0c;该实例是相应协程的唯一标识并管理其生命周期。还可以将 Job 传递给 …

数据结构与算法(四) 广度优先搜索

本篇文章继续来学习广度优先搜索算法&#xff08;Broad-First-Search&#xff0c;BFS&#xff09; 1、本质 广度优先搜索本质上还是遍历整个搜索空间&#xff0c;找到给定问题的解 实际上也是一种暴力搜索算法&#xff0c;不过其中的实现细节和优化细节还是值得探讨的 与深度…

基于PHP+MySQL的大学生交友社交网站

近年来,大学生的数量在逐步的增加,为了能够让这些大学生有一个更好的交友环境,需要创建一个基于大学生的社交交友网站。这样可以拉近彼此大学生之间的感情,让他们可以更好的进行学习和交流。 PHP大学生交友社交网站通过PHP&#xff1a;MySQL进行开发,分为前台和后台两部分,通过…

线程的状态

Java中线程的状态是通过枚举类型Thread.State表示的 &#xff0c;通过打印这些枚举类型&#xff0c;就可以知道java中线程的状态有哪些 public class ThreadState {public static void main(String[] args) {for (Thread.State state : Thread.State.values()) {System.out.pr…

进销存管理系统是什么?有哪些功能?

对于2022年刚开始&#xff0c;但是可以的确的是禽流感在短时期内是不可能返回他们&#xff0c;作为虚拟店面批发商想勇往直前中&#xff0c;就必须要亲吻网络&#xff0c;把销售业务从实体店搬至线上去。 想突破现状&#xff0c;化解虚拟店面批发民营企业的存活问题&#xff0…

ES初使用记录——写入与查询数据

本周接到一个任务&#xff1a;定时统计订单表中的数据&#xff0c;将异常订单挑出来&#xff0c;放入ES中供统计页面从总数点击跳转过去进行列表展示。 一、配置ES 配置maven&#xff0c;注入template Resource private ElasticsearchTemplate elasticsearchTemplate; 二、…

一、OBS概述

1. 概述 obs官网git源码编译 2. 软件能力 输入&#xff1a;文本、图片、窗口、音视频及摄像头等 处理&#xff1a;视频及图片滤镜、音频混音等 输出&#xff1a;rtmp推流、本地录制(mp4)、音视频裸数据(pcm/yuv/rgb)等 3. 模块 a. core核心模块 libobs 加载、管理各个功能…

Ansys Zemax | 大功率激光系统的STOP分析2:如何进行光机械设计准备

大功率激光器广泛用于各种领域当中&#xff0c;例如激光切割、焊接、钻孔等应用中。由于镜头材料的体吸收或表面膜层带来的吸收效应&#xff0c;将导致在光学系统中由于激光能量吸收所产生的影响也显而易见&#xff0c;大功率激光器系统带来的激光能量加热会降低此类光学系统的…

性能测试面试题总结(答案全)

目录 1.什么是负载测试&#xff1f;什么是性能测试&#xff1f; 2.性能测试包含了哪些测试&#xff08;至少举出3种&#xff09; 3.简述性能测试的步骤 4.什么时候可以开始执行性能测试&#xff1f; 5.你如何在负载测试模式下执行功能测试&#xff1f; 6.响应时间和吞吐量…

时序数据库 InfluxDB

一、介绍 InfluxDB 是一个时间序列数据库&#xff0c;GO 编写的,旨在处理高写入和查询负载。InfluxDB 旨在用作涉及大量时间戳数据的任何用例的后备存储&#xff0c;包括 DevOps 监控、应用程序指标、物联网传感器数据和实时分析。 特点&#xff1a; 专门为时间序列数据编写的…

格式工厂安装与使用教程

格式工厂支持各种类型视频、音频、图片、word转pdf等多种格式的免费转换&#xff0c;是一款非常优秀的良心软件。 在电脑浏览器中打开下载地址http://www.pcgeshi.com/index.html , 单击"立即下载"按钮即可。 打开下载的文件&#xff0c;等待安装即可。&#xff08…

标记肽Bz-Pro-Phe-Arg-pNA、59188-28-2

血浆激肽释放酶&#xff0c;cruppain和胰蛋白酶的显色底物。编号: 140214 中文名称: 标记肽Bz-PFR-对硝基苯胺 英文名: Bz-Pro-Phe-Arg-pNA CAS号: 59188-28-2 单字母: Bz-PFR-pNA 三字母: Benzoyl-Pro-Phe-Arg-pNA 氨基酸个数: 3 分子式: C33H38O6N8 平均分子量: 642.7 精确分…

python 多线程编程(线程同步和守护线程)

守护线程&#xff1a; 随着主线程的终止而终止&#xff0c;不管当前主线程下有多少子线程没有执行完毕&#xff0c;都会终止。 线程同步&#xff1a; join所完成的工作就是线程同步&#xff0c;即主线程任务结束之后&#xff0c;进入阻塞状态&#xff0c;一直等待其他的子线程执…

深入了解tomcat线程池

1.概述 在正式进入Tomcat线程池之前&#xff0c;小伙伴们可以先回顾一下JDK中的线程池相关特性&#xff0c;对于JDK线程池的总结和源码的解析感兴趣的童鞋&#xff0c;也可参考博主的层层剖析线程池源码的这篇文章&#xff0c;文章主要讲述对线程池的生命周期&#xff0c;核心参…

Vue3 - 不再支持 IE11,到底为什么?

前言 咱们的 Vue2 目前仍然支持 IE11&#xff0c;但是到了 Vue3 这里&#xff0c;直接被抛弃了。 IE 浏览器可以说是早期前端开发的噩梦&#xff0c;现在还充斥的大量兼容 IE 浏览器的代码&#xff0c;你可以在网上看到很多类似的信息。 IE 浏览器下 float 布局错乱。IE 浏览器…

商务呈现之沟通管理-上

一、前言 课程目标及适用人群课程目标:商务/项目的目标达成,任务推动,良好的商务呈现 现实的困扰我们商务活动中是否有遇到以下情况: (1)需求老是变 理解不一致细节不清晰(2)CR很难谈 需求基线不清晰没有利用好"交换"(3)原地打转 事项推进缓慢几个月还在讨…

相似度系列-6:单维度方法:Evaluating Coherence in Dialogue Systems using Entailment

Evaluating Coherence in Dialogue Systems using Entailment coherence 英文中意味着连贯性、条理性。 这篇文章是面向对话应用的&#xff0c;更加关注于对话中上下位的连贯性。1. 直接转换为 NLI问题&#xff0c;premise-hypothesis问题。——2. 数据集是自己构造的。——数…

一文带你了解【抽象类和接口】

1. 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是并不是所有类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 举个简单的例子 上图中&#xff0c;三角形&#xff0…