数据存储 文章目录
- 前言
- 一、Mysql
- 二、Redis
-
-
- 1、简单介绍一下Redis优点和缺点?
- 2. Redis常见数据结构以及使用场景有哪些?(高频)
- 3、系统中为什么要使用缓存?
- 4、常见的缓存同步方案都有哪些?(高频)
- 5、Redis有哪些数据删除策略?(高频)
- 6、Redis中有哪些数据淘汰策略?(高频)
- 7、Redis中数据库默认是多少个db即作用?
- 8、缓存穿透、缓存击穿、缓存雪崩解决方案?(高频)
- 9、什么是布隆过滤器?(高频)
- 10、Redis数据持久化有哪些方式?各自有什么优缺点?(高频)
- 11、Redis都存在哪些集群方案?
- 12、说说Redis哈希槽的概念?
- 13、Redis中的管道有什么用?
- 14、谈谈你对Redis中事务的理解?(高频)
- 15. 先更新缓存还是先更新数据库?(面试题)
-
- 三、MongoDB
- 总结
前言
一、Mysql
1. 存储引擎===================================
2. 索引=======================================
6、什么是索引?(高频)
3. SQL优化====================================
16、关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?(高频)(未写完)
- 在业务系统中 , 除了使用主键进行的查询 ,其他的我都会在测试库上测试其耗时 ,慢查询的统计主要由运维在做 ,会定期将业务中的慢查询反馈给我们 ;
- 慢查询的优化首先要搞明白的原因是什么 ?
-
- 是查询条件没有命中索引 ?
-
- 是load了不需要的数据列 ?
-
- 还是数据量太大 ?
-
- 所以优化也是针对这三个方向来的 :
-
- 分析语句的执行计划 , 然后获得其使用索引的情况 .之后修改语句或者修改索引 ,使得语句可以尽可能的命中索引 ;
-
- 分析语句 ,看看是否load了额外的数据 ,可能是查询了多余的行并且抛弃掉了,可能是加载了许多结果中并不需要的列 ,对语句进行分析以及重写 ;
-
- 如果是表中的数据量太大导致查询慢 ,可以进行横向或者纵向的分表 ;
-
4. 事务 =======================================
20、什么是事务?(高频)
- 由多个操作组成的一个逻辑单元 , 组成这个逻辑单元的多个操作要么同成功 , 要么同失败 ;
21、简单谈一下事务的特性? ACID是什么?可以详细说一下吗?(高频)
- 事务有四个特性 :
- A = Atomicity 原子性 :
- 要么全部成功 , 要么全部失败 , 不可能只执行一部分操作 ;
- C = Consistency 一致性 :
- 系统 (数据库)总是从一个一致性的状态转移到另一个一致性的状态 , 不会存在中间状态 ;
- I = Isolation 隔离性 :
- 通常来说 , 一个事务在完全提交之前 , 对其他事务是不可见的 ;(有例外情况) ;
- D = Durability 持久性 :
- 一旦事务提交 , 哪怕系统崩溃也不会影响到这个事务的结果 ;
22、并发事务带来哪些问题?(高频)
- 在典型的应用程序中 , 多个事务并发运行 , 经常会操作相同的数据来完成各自的任务(多个用户对同一数据库进行操作) , 并发虽然是必须的 , 但是可能会导致以下问题 :
- 脏读(Dirty read) :
- 当一个事务正在访问数据并且对数据进行了修改 , 而这种修改还没有提交到数据库中 , 这时另外一个事务也访问了这个数据 , 然后使用了这个数据 ;
- 因为这个数据是还没有提交的数据 , 那么另外一个事务读到的这个数据是"脏数据" , 依据"脏数据"所做的操作可能是不正确的 ;
- 丢失修改 (Lost to modify) :
- 指在一个事务读取另一个数据时 , 另外一个事务也访问了该数据 , 那么在第一个事务中修改了这个数据后 , 第二个事务也修改了这个数据 ;
- 这样第一个事务内的修改结果就被丢失 , 因此称为丢失修改 ;
- 例如 :
- 事务1读取某表中的数据A=20 , 事务2也读取A=20