1.Redis的五种数据类型
String、Hash、List、Set、ZSet(有序Set)
2.Redis数据持久化的方式
AOF持久化
RDB持久化(Redis默认的持久化机制)
3.Redis如何实现主从复制
发送:
1.从库和主库建立连接后,向主库发送sync命令
2.主库接收到命令后,进行开启数据存盘的进程,数据持久化到RDB或者AOF文件
3.持久化完毕后,主库把持久化文件发送给从库
接收:
1.全量复制:接收到主库发送过来的文件后,会全部保存到内存中
2.增量复制:连接成功后,主库会把收集到的修改的执行命令发送给从库,从库只需要执行这些命令完成同步,不需要在执行整个文件。
4.Redis是单线程为什么执行效率还这么高
1.Redis执行命令基于内存操作。
2.Redis是单线程执行命令,没有线程切换的开销
3.基于IO多路复用机制提升IO利用率
4.高效的存储结构,全局hash表和多种高效的存储结构
5.Redis的key过期了为什么还没有释放
1.惰性删除(用到过期的key才会删除)
2.定时删除(定时批量的删除,不会全量删除)
6.什么是缓存雪崩以及解决方案
定义:在高并发下,大量的key在同一时间过期了,大量的请求直接落在数据库上,导致数据库宕机。
解决方案:
1.随机设置key过期时间,避免大量key集体失效。
2.不设置过期时间
3.使用定时任务,过期前刷新缓存。
7.什么是缓存穿透以及解决方案
定义:Redis和数据库都没有对应的key,导致查询Redis不存在,无法拦截,直接被穿透到数据库,导致数据库压力过大宕机
解决方案:
1.对于不存在的数据缓存到Redis中,设置一个短期过期时间
2.拉黑该IP
3.对数据做校验,校验不合法的key
4.使用布隆过滤器
8.什么是缓存击穿以及解决方案
定义:某一个热点数据的key在失效的一瞬间,瞬间大量的请求到数据库,导致数据库宕机
解决方案:
1.设置热点数据永不过期
2.加上互斥锁:在第一个线程查询数据库上的该条数据时加上锁,其他线程等待状态,查询后更新到数据库,后面的线程查询就会去查缓存了。
9.Redis和Memcached的区别
1.存储方式不同:Memcached把数据全部存在内存中,断电会挂掉,数据不能超过内存大小。Redis有部分数据持久化到硬盘上。
2.数据支持类型不同:Memcached支持的数据类型比较简单;Redis有复杂的数据类型。
3.使用的底层模型不同:
10.Redis的默认端口号是多少
6379
11.Redis作为分布式锁如底层是何实现
1.首先用setnx来保证,如果key不存在才能获得锁,如果key存在,则获取不到锁
2.然后要用rua脚本来保证多个Redis操作的原子性
3.同时要考虑到锁过期,使用一个看门狗的定时任务来监听锁是否需要续约
12.Redis数据和MySql如何保证数据同步
终极策略:延时双删(先删除Redis数据,再更新数据库,然后线程延时几百毫秒,最后再删一遍Redis数据)
13.Redis的集群方案
主从模式:上面有详细说明流程
哨兵模式:sentinel 是主从模式的升级版
14.为什么使用缓存
1.高性能
2.高并发