Redis 总结

  1. Redis 是什么?
    Redis是基于内存的缓存数据库,是开源的,由C语言编写,是非关系型的数据库,存储的数据类型比memcache要多,并且支持持久化。
  2. Redis 支持的数据类型
    a. String
    b. Hash
    c. List
    d. Set
    e. ZSet
  3. Redis持久化方案
    持久化是为了防止当服务器挂掉或者断电后内存中数据丢失。
    a. RDB(Redis DataBase)
    将内存中的数据save到硬盘中的RDB文件中,执行save命令的时候会fork个子进程,性能比AOF模式高,恢复速度比AOF快,占用磁盘空间比AOF小。类似于虚拟机中的快照。
    b. AOF(Append-only file)
    类似于关系型数据库中的SQL文件,执行操作会按照设定的周期进行语句的输出,叠加到指定的文件中。使用这种方式当服务器挂掉损失较小,优先使用AOF还原数据,AOF文件错误容易修复,对服务器瞬时性能有影响。
  4. 什么是缓存穿透?如何避免?
    缓存穿透就是当查询一个key时,如果不存在对应的value,那就去DB中查找,从而DB提高了DB的压力。
    解决方案:对一定不存在的key进行过滤,或当查询不存在的key时,先对其赋值为空,从而查询数据库,如果数据库中存在值,就覆盖,不存在就仍然存储为空。
  5. 什么是缓存雪崩?如何避免?
    当Redis服务器重启或者大量缓存集中时间内失效,在失效的时间段内,会提高DB压力。
    解决方案:让不同的key在不同时间内过期或在缓存失效后,通过加锁或者队列来控制数据库写缓存线程的数量。但是我个人认为如果不是服务器宕掉,二级缓存比较靠谱一点。
  6. Redis 全称是 Remote Dictionary Server
  7. Redis 有哪些淘汰策略?
    volatile-ttl:回收过期的也就是超过规定时间的键
    allkeys-lru:回收使用次数最少的键
    volatile-lru:回收使用次数最少的键,仅限于在设置过期时间中的。
    allkeys-random:回收随机的键
    volatile-random: 随机回收键,仅限于在设置过期时间中的。
    noeviction:不淘汰,如果内存已满,添加数据是报错
  8. 字符串类型的值能存储最大容量是多少?
    512M
  9. 为什么Redis把数据存到内存中?
    因为内存读写速度比硬盘要快,如果存储到硬盘中,那就是和其它应用一起使用硬盘资源,如果再进行一步DB查询,此时另一个线程读Redis,负载的瓶颈就是硬盘了。所以提高读写性能并且分散I/O设备,提高整体运行效率。
  10. 如何保证Redis数据都是热点数据
    当redis内存大小提升到一定程度后,就会执行数据的淘汰策略。
  11. Redis常见的场景
    会话的存储:会话缓存,也就是用户登录的信息,用户的会话对于一致性要求不高。
    经常访问的数据:例如页面中的新闻,轮播图地址,访问计数器等等。
    队列:例如密码错误登录限制,就可以通过redis中的list来实现,当队列中第n次出现的这个用户,登陆时间和现在时间的差是否满足异常登录条件。
  12. Redis 的 Java客户端
    Jedis、Redisson等
  13. Redis key的过期时间和永久有效分别怎么设置?
    设置过期时间:expire
    设置永久有效:persist
  14. 如何优化Redis内存
    尽可能使用散列表,定义一个hash散列,并且把这个类型的数据都放在这个散列里。
  15. Redis内存回收如何工作的?
    a. 数据过期后自动回收
    b. 达到内存限制,按照策略回收
  16. 如何进行大批量的数据插入?
    通过管道进行大量插入操作,大概意思是客户端不需要等待服务端的响应,直接把数据发送给服务器,最后一次性接收服务器的回应。

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。