redis面试知识点
2019-10-18 本文已影响0人
小团团333
1、五种基础数据结构
- 字符
- hash 数组+链表
- set
- sorted set
- list
2、集群模式(cluster, Sentinel)
- cluster:redis3.0主推模式,采用哈希槽分片,优势是易扩容
- Sentinel:哨兵模式、主备。高可用
3、持久化机制
- AOF:命令追加,优点:不会丢数据,缺点:恢复比较慢
- RDB:存储快照,优点:恢复比较快,方便持久化,缺点:可能会丢数据
4、淘汰策略
在redis.conf 中配置 maxmemory指定redis能使用的最大内存,达到内存最大限制时。redis会根据m- axmemory-policy,来决定具体的行为,淘汰策略:
- noeviction:不删除策略,达到maxmemory,直接返回错误
- allkeys-lru:所有key通用,优先删除最少使用的key
- volatile-lru:只限于设置了expire的部分,优先删除最少使用的key
- allkeys-random:所有key通用,随即删除一部分
- volatile-random:只限于设置了expire的部分,随机删除一部分
- volatile-ttl:只限于设置了expire的部分,优先删除快过期的key
5、过期策略
- 定期删除:redis每隔100ms就随机抽取一些设置了过期时间的key,检查是否过期,符合则删除
- 惰性删除:每次get的时候会检查是否过期,过期则删除
目前redis采用的是定期删除+惰性删除两种策略
6、缓存穿透
产生原因:请求的数据在缓存中大量不命中。导致请求走数据库
解决办法:如果参数不合法可以使用BloomFilter拦截;设置一个较短过期时间的空对象到缓存中
7、缓存雪崩
产生原因:redis挂掉,请求全走数据库,对缓存数据设置了相同的过期时间,导致某段时间内缓存失效,请求全走数据库
解决办法:过期时间加随机值;事发前:实现redis的高可用,事发中:可以设置本地缓存+限流,事发后:redis持久化恢复
8、缓存与数据库的双写一致性
先删除缓存,再更新数据库
先更新数据库,在删除缓存
9、keys 和 scan 命令
keys时间复杂度为O(n),阻塞
scan cursor [MATCH pattern] [COUNT count] 时间,非阻塞,游标扫描
10、查看redis的使用
info命令
10、如何使用redis存放热点key
解决方案:限定Redis最大占用内存,Redis会根据自身数据淘汰策略,留下热数据到内存