Redis的面试连环炮

面试题

  • Redis和Memcache有什么区别

  • Redis的线程模型是什么?

  • Redis的数据类型及应用场景?

  • 为什么单线程的Redis比多线程的Memcache的效率要高?

  • 为什么Redis是单线程但是还可以支撑高并发?

  • Redis如何通过读写分离来承受百万的QPS

  • Redis的持久化策略有哪些?AOF和RDB各有什么优缺点

  • Redis的过期策略以及LRU算法

  • 如何保证Redis的高并发和高可用?

  • redis的主从复制原理能介绍一下么?

  • redis的哨兵原理能介绍一下么?

  • Redis主备切换的数据丢失问题:异步复制、集群脑裂

  • Redis哨兵的底层原理

剖析

Redis最基本的一个内部原理和特点就是NIO异步的单线程工作模型。Memcache是早些年个大互联网公司常用的缓存方案,但是现在近几年都是使用的redis,没有什么公司使用Memcache了。

注意:Redis中单个Value的大小最大为512MB,redis的key和string类型value限制均为512MB

Redis和Memcache的区别

从Redis作者给出的几个比较

  • Redis拥有更多的数据结构

    • Redis相比Memcache来说,拥有更多的数据结构和支持更丰富的数据操作,通常在Memcache里,你需要将数据拿到客户端来进行类似的修改,在set进去。这就大大增加了网络IO的次数和体积,在Redis中,这些复杂的操作通常和一般的set/get一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis是不错的选择
  • Redis内存利用率对比

    • 使用简单的key-value存储的话,Memcache的内存利用率更高,而Redis采用Hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcache
  • 性能对比

    • 由于Redis只使用了单核,而Memcache可以使用多核,所以平均每核上Redis在存储小数据比Memcache性能更高,而在100K以上的数据中,Memcache性能更高,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcache还有略有逊色。
  • 集群模式

    • Memcache没有原生的集群模式,需要依赖客户端来实现往集群中分片写入数据,但是Redis目前是原生支持cluster模式的。

Redis都有哪些数据类型,及使用场景

  • String

    • 最基本的类型,就和普通的set 和 get,做简单的key - value 存储
  • Hash

    • 这个是 类似于Map的一种结构,就是一半可以将结构化数据,比如对象(前提是这个对象没有嵌套其它对象)给缓存在redis中,每次读写redis缓存的时候,可以操作hash里面的某个字段

    key=150
    value={
    "id": 150,
    "name": "张三",
    "age": 20,
    }

    • Hash类的数据结构,主要用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中某个字段的值。

你可能感兴趣的:(Redis的面试连环炮)