软通:
1.redis知识点合集:
(1)项目中一般哪里会用到redis?
热点数据缓存或者接口数据缓存
使用redis来缓存一些业务数据的敏感信息,比如:验证码,用户信息,排行榜信息等等
使用redis来实现分布式锁,解决并发环境下的共享数据的问题
(2)redis常用的数据类型
list,set,hash,String,Zset
(3)redis的key和value的值都是有限制的,都是上限512M
(4)Redis数据持久化策略:
RDB:在指定时间间隔内将内存中的数据集以快照形式存入磁盘
(全量,快照形式,只保存内存数据,体积小,恢复速度快--直接读取数据到内存)
AOF:以日志形式记录服务器的读写操作
(增量,指令形式,保存指令,体积大,恢复时间慢--需要一个一个执行指令)
(5)redis数据过期策略
惰性删除:只有当key的值拿出来的时候才会对数据进行过期检查,这样会导致大量过期的key保存在内存中;
定期删除:每隔一段时间来抽取一批key来进行过期检查操作并删除key,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。(默认每秒扫描10次)
(6)redis的数据淘汰策略:
1:针对有过期时间的key:
(1)挑选最近最少使用的key进行淘汰
(2)挑选最不经常使用的key进行淘汰
(3)挑选将要过期的key进行淘汰
(4)挑选任意key进行淘汰
2.淘汰全库数据:
(1)内存不足时,淘汰最近最少使的数据
(2)内存不足时,淘汰最不经常使用的key
(3)选择任意数据集进行淘汰
3.不淘汰数据
当内存不足时,插入新数据报错
(7)redis集群模式
主从,哨兵,Cluster分片集群
(8)redis主从同步
Redis 的主从同步(replication)机制,允许 Slave 从 Master 那里,通过网络传输拷贝到完整的数据备份,从而达到主从机制。
主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据。一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。
(9)redis如何保证和mysql保持数据一致?
同步双写--》先更新Mysql,再更新Redis,这个时候如果更新Redis失败,可能仍然不⼀致
删除缓存重新加载--》先删除缓存,在更新Mysql,再次查询时将数据添加到缓存中,仍然可能不一致,多线程环境下,一个线程删除了缓存,还没来得及更新mysql,另一个线程来查询了,会把mysql的老数据查询到缓存中
延迟双删--》先删除Redis缓存数据再更新Mysql,再次查询的时候在将数据添加到缓存中 , 这种方案可能仍然会有数据 , 这个时候我们可以在删除之后稍微延迟(1-2S)时间 , 再将数据删除 , 再次查询的时候进行缓存 , 这个时候就能保持一致了
(10)数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据?
配置Redis的内容淘汰策略为LFU算法 , 这样会把使用频率较低的数据淘汰掉 , 留下的数据都是热点数据。(缓存淘汰策略)
(11)redis的分布式锁怎么实现?
通过一个指令”SETNX“ ->set if not exist
死锁:加超时时间
超时:看门狗机制,自动为锁续期
2.springboot的启动注解
@SpringBootApplication
(1)@Configuration
:将该类标记为应用程序的配置源
(2)@EnableAutoConfiguration
:启用 Spring Boot 的自动配置机制
(3)@ComponentScan
:启用组件扫描(扫描注解)
我如果想要在springboot启动之前加载一些数据,应该怎么做?
实现commandLineRunner或者ApplicationRunner的接口来实现初始化数据。
3.线程池的七大参数:
(1)核心线程数 -》处理器核心数
(2)最大线程数 -》系统的负载能力和硬件条件
(3)空闲值 -》针对要处理的任务类型
(4)空闲值的时间单位
(5)阻塞队列 --》new ArrayBlockQueue
(6)创建线程的方式--》线程工厂 Executors.defaultThreadFactory()
(7)线程拒绝策略
线程拒绝策略:
(1)丢弃任务,抛出异常(默认)
(2)丢弃任务,不抛出异常
(3)抛弃等待最久的任务并把当前任务加入到队列之中
(4)直接调用run方法绕过线程池直接执行
4.mysql中explain命令会返回哪些结果?
select_type: 查询的类型
type: 访问类型,表示MySQL如何查找索引行。按效率排序从好到坏依次是:system
, const
, eq_ref
, ref
, range
, index
, ALL
possible_keys: 可能使用的索引列表
key: 实际使用的索引
key_len: 使用的索引长度