1.Redis是什么?
Redis是C语言编写的基于内存的高速缓存的非关系型数据库,它以key-value形式存储数据,支持的数据类型也十分丰富。
2.Redis支持的数据类型有哪些?
String,List,Hash,Set,Sorted Set等。
3.Redis的使用场景有哪些?
1.热点数据缓存---String
2.排行榜---ZSet
3.计时器
4.实现不同服务器之间的seesion共享
5.设置分布式锁
4.Redis为什么是单线程的?
Redis是基于内存缓存数据,cpu不会成为Redis的性能瓶颈,影响Redis的大可能是机器内存的大小和网络带宽,既然cpu不会成为Redis的性能瓶颈且单线程容易实现,那么就顺理成章地采用单线程方案了。
5.Redis一直是单线程的吗?
也不是,比如--bgsave--会fork出一个子线程。
6.Redis持久化有几种方式?
RDB
AOF
7.什么是缓存穿透?怎么解决?
当查询数据即不在缓存也不在数据库中,这时有大量请求恶意访问该数据,造成数据库压力过大的现象就是缓存穿透。
该现象有以下情形:
1.查询id不合法(负数、小数等)
2.数据库确实不存在该数据
解决方案:
1.针对查询id不合法,可以在controller层增加id校验,对于id不合法的查询直接返回
2.针对数据库确实不存在该数据的情形,可以在缓存中增加一个空对象,且设置布隆过滤器
8.怎么保证缓存数据和数据库数据的一致性?
1.合理设置缓存数据的过期时间
2.增加、删除、修改数据之前删除缓存数据
9.什么是缓存雪崩?怎么解决?
当缓存服务器重启或缓存中大量数据即将过期,这时有大量请求访问这些数据,造成数据库压力过大,这种现象就是缓存雪崩。
该现象有以下情形:
1.项目刚刚上线
2.Redis服务宕机
3.缓存中大量数据即将过期
解决方案:
1.提前预热数据
2.Redis服务集群化模式
3.分散设置过期时间
10.Redis怎么实现分布式锁?
使用Redis命令setnx--占锁 在业务代码执行完毕之后释放锁--del
11.Redis实现分布式锁有什么缺陷?
超时问题:业务代码未执行完毕之前锁失效,会出现失锁问题
解决方案:通过WatchDog实现锁自动延长过期时间,引入第三方Redission
12.Redis淘汰策略有哪些?
1.从设置过期时间的数据集中淘汰最近最少使用的数据
2.从设置过期时间的数据集中淘汰即将过期的数据
3.从设置过期时间的数据集中随机淘汰数据
4.从数据集中淘汰最近最少使用的数据
5.从数据集中随机淘汰数据
6.禁止驱逐任何数据