一、举例Redis每种数据结构的使用场景
1.1、String类型使用场景
- 信息缓存:如token、session
- 计数器:如记录用户的访问次数
- 分布式锁
1.2、Hash的使用场景
- 以购物车为例,用户id为key,hash里面存储添加到购物车的商品id和对应的数量
1.3、List的使用场景
- 定时排行榜。每隔一段时间计算出一个排行榜, 可将其存放在list中。不适用于实时排行榜。
1.4、Set的使用场景
- 如音乐app中收藏的歌单可以使用set进行存储
1.5、Zset的使用场景
- 实时排行榜。如音乐app中实时热门音乐榜单,key为榜单类型,歌曲id为value,歌曲热量为score。
二、Redis的线程模型
redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。
如果面试官继续追问为啥 redis 单线程模型也能效率这么高?
-
纯内存操作
-
核心是基于非阻塞的 IO 多路复用机制
-
单线程反而避免了多线程的频繁上下文切换问题
三、Redis的内存淘汰机制
当Redis缓存空间不足时,通过淘汰旧数据,可以清理缓存空间,从而可以加入新数据。对于缓存中的旧数据,redis有多种淘汰策略。这些淘汰策略主要可以分为几