前言
Redis你们都不陌生了,是高并发解决方案居家必备的良药。能够帮助咱们解决高并发,存在的性能问题。面试
做为面试常问中间件,你应该知道这些常见redis面试题。redis
常见面试题
- 单线程的redis为毛这么快?
从如下几点回答,纯内存操做,单线程操做避免了频繁上下文切换,采用非阻塞的多路复用机制。
缓存
redis-client在操做的时候,产生不一样类型的事件的socket,服务端的IO多路复用程序,将其放入队列,事件派发器会去队列中取,转发到不一样的事件处理器中处理。并发
- redis数据类型有哪些?
一共五种。异步
- String 常见的get/set操做。
- hash value能够存放一些结构化的对象信息。
- list 能够做为简单的队列使用,利用lrange作分页查询。
- set 存放不重复的集合。
- sorted set 带有score权重的set集合,能够作排行榜需求。
- redis的过时策略有哪些?
定时删除+惰性删除socket
- 定时删除:定时器监控key,过时自动删除,过程消耗cpu,通常不采用。
- 按期删除+惰性删除:每隔100ms检查一次,有过时key则删除,惰性删除是在尝试获取某个key时进行检查,进行删除操做。
- 内存淘汰机制:能够设置redis的配置 maxmemory-policy volatile-lru,在内存不足时对使用最少的key进行淘汰。
- redis缓存穿透和雪崩怎么解决?
缓存穿透:分布式
- 互斥锁;
- 异步更新:维护value的失效时间,异步线程进行更新;
- 布隆过滤器进行拦截;
防止雪崩:高并发
- 失效事件随机,避免集体失效;
- 互斥锁,存在性能问题;
- 多级缓存;
- redis并发key竞争如何解决?
通常的采用redis的事务机制,可是在集群环境下数据已经分片就很难搞,redis的事务就显得鸡肋。性能
分状况讨论:线程
- 对顺序没有要求,采用分布式锁进行排队,属于悲观锁方式。
- 对顺序有要求,采用时间戳方式,在set以前比对时间戳,属于乐观锁方式。
欢迎关注公众号【服务端技术杂谈】,转发,点赞。