一、Redis支持的数据类型?
Redis支持的数据类型主要有五种:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
二、什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?
1. 把内存中的数据保存到磁盘的过程。
2. RDB和AOF
3. RDB优点: 大数据RDB数据恢复快。 缺点: 完整性差,会丢失一段时间内的数据
AOF优点: 数据完整高. 缺点: 大数据AOF数据恢复慢。
三、Redis 有哪些架构模式?讲讲各自的特点?
1. 主从复制--->主节点负责写操作 主节点的数据会同步到所有的从节点上。 从节点只负责读操作。一旦主节点宕机,从节点无法自动上位。
2. 哨兵模式---->哨兵服务监听主节点的状态,如果主节点宕机后会从所有的从节点中投票选举一个主节点。 只有一个主节点完成写操作。
3. 集群模式----> 可以有多个节点完成写操作。
四、什么是缓存穿透?如何避免?
1. 缓存穿透: 查询的数据在数据库中不存在,缓存中也不存在,而有些人恶意访问这种数据。
缓存穿透(cache penetration)是用户访问的数据既不在缓存当中,也不在数据库中。出于容错的考虑,如果从底层数据库查询不到数据,则不写入缓存。这就导致每次请求都会到底层数据库进行查询,缓存也失去了意义。当高并发或有人利用不存在的Key频繁攻击时,数据库的压力骤增,甚至崩溃,这就是缓存穿透问题。
2. 避免:
1. controller校验不合法的数据。
2. 设置一些空对象到缓存中。 该对象的过期时间不能太长一般不超过5分钟。
3. 布隆过滤器。解决办法:
业务层校验不合法的数据.比如id=负数。
如果查询的结果为null,也往缓存中存入一个Null对象。而且该对象的存放时间不要太长。
使用布隆过滤器。 把表中存在的所有id存入到布隆过滤器中,查询时,先经过布隆过滤器,如果不存在则直接返回null,如果存在则查询缓存和数据库。
五、什么是缓存雪崩?何如避免?
缓存雪崩是指缓存由于某些原因整体或者大量失效,导致大量请求打到后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。
在使用缓存时,通常会对缓存设置过期时间,一方面目的是保持缓存与数据库数据的一致性,另一方面是减少冷缓存占用过多的内存空间,但当缓存中大量热点缓存采用了相同的实效时间,就会导致缓存在某一个时刻同时实效,请求全部转发到数据库,从而导致数据库压力骤增,甚至宕机。从而形成一系列的连锁反应,造成系统崩溃等情况,这就是缓存雪崩(Cache Avalanche)
如何解决缓存雪崩?
1.通常的解决方案是将key的过期时间后面加上一个随机数(比如随机1-5分钟),让key均匀的失效。
2. 可以把一些热点数据提前放入缓存。
3. 构建缓存高可用集群(针对缓存服务故障情况)。
六、Redis淘汰策略有哪些?
redis--内存肯定会满,添加新数据【】