Redis-1

Redis缓存

主要数据类型

  • String 数字、字符串等
  • Hash 类似于字典
  • List 根据索引访问
  • Set 集合,不重复
  • Sorted Set 有序集合

主要工作模式

  • 单节点实例,单一服务主机独立运行
  • 主从模式,有主服务节点和从服务节点。主节点崩溃,对整个系统会产品致命大家。从节点只可读,主可读可写(没记错的话)。
  • sentinel模式,哨兵服务模式,当主节点崩溃时,可选举产生新的主节点。数据量较小(一台服务器)时使用
  • cluster模式,服务于大数据量的情况。

过期策略和内存淘汰机制

  • 定期删除
  • 懒惰删除
  • 各种淘汰机制,类似于操作系统学习时讲的内存操作

单线程的Redis为什么会快

  • 纯内存操作
  • 避免频繁的上下文切换
  • 采用非阻塞的I/o多路复用机制

优劣势

优势:

  1. 性能好。主要应用于有些特别费时的查询,而且其查询结果长时间不变。
  2. 并发高。大并发情况下,多个请求同时访问数据库,可以使用缓存来改善这个问题。

劣势:

或者说是可能存在的问题

  1. 缓存和数据库一致性的问题。有两种一致性,最终结果一致性和强一致性。要求最终结果一致性的问题,需要针对具体问题制定正确的更新策略,并采用合适的补偿措施。而有强一致性需求的数据,不能放缓存。
  2. 缓存雪崩问题。缓存雪崩主要指,同一时间,缓存大面积失效,然后此时来了一大波请求,请求都直接访问数据库了。解决缓存雪崩问题,可采用 随机缓存失效策略,来避免缓存集体失效;使用互斥锁;双缓存机制。
  3. 缓存击穿问题。黑客故意访问缓存中不存在的数据,导致所有的请求都访问数据库,进而导致数据库连接异常。可使用互斥锁、异步更新策略、判断请求是否有效的拦截机制。
  4. 缓存的并发竞争问题。有多个子系统同时去设置一个key。可以使用事务机制来解决,但是有点鸡肋,事务机制仅适用于一个数据服务器上面来使用该方法,在生成场景下,数据多是做分片存储的。如果是不要求数据是有顺序的话,可以加上时间戳等,或者利用队列操作来避免多个子系统的竞争。