问题

redis的作用是什么

答案

  • redis是一款开源的、高性能的键-值存储,支持字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。虽说Redis是一种内存数据库,但同时也支持数据的持久化。redis有两种固化方式:RDB(Redis DataBase)和AOF(Apend Only File) 。
  • rdb即快照方式,每隔一段时间,内存中的数据会被存储到硬盘上,当下一次服务启动时,直接恢复最近的快照即可,恢复时间快,但占空间多,这是典型的以空间换时间。
  • aop即命令方式,将服务从开始到当前的所有命令都存储起来,当下一次服务启动时,把这些命令从头到尾执行一遍,恢复时间慢,但占空间少,这是典型的以时间换空间。
  • 缓存穿透是指查询一个一定不存在的数据,redis中找不到的时候,出于容错考虑,系统会再去DB再查找。如果要是有人利用不存在的key频繁查询攻击我们的应用,这就是缓存穿透。解决缓存穿透一般有两种方式,一是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力;二是直接返回一个空数据,同样也避免了对底层存储系统的查询压力。
  • 缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。解决缓存雪崩可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
  • 缓存击穿是指存在一种非常“热点”的数据,在这个热点数据过期的时候,有大量的并发请求过来,这些请求会击穿redis直到后端DB,大量的这种请求可能会瞬间把后端DB压垮。解决缓存击穿可以使用互斥锁或者让这些数据永不过期。
  • redis集群,为了提升读写能力,保证稳定性,一般会配置redis集群。redis集群会分为主节点[master]和从节点[slave],主节点可读可写,从节点只读,主节点的数据会不断同步到从节点。