要点
-
掌握数据结构和缓存的基本使用方法;
-
掌握支撑Redis实现高可靠、高性能的技术;
高可靠
- Redis之所以可以实现高可靠、高性能,和它的持久化机制、主从复制机制、哨兵、故障自动恢复、切片集 群等密不可分。
- 单机版Redis,当实例宕机后,如果我们需要从磁盘恢复数据,还会面临一个问题:恢复也是需要时间的,而且实例越大,恢复的时间越⻓,对业务的影响就越大。(解决方案:采用多个副本)
- 当主节点宕机后,我们把从节点提升上来,这个过程是手动的过程。(解决方案:哨兵,实现自动切换)
- 切片集群(数据路由和数据迁移)
高性能
- Redis的数据都存储在内存中,再加上使用IO多路复用机制。
-
精通Redis底层实现原理。
- list、Hash、Sorted Set为了 减少内存的使用,在数据量比较少时,都采用压缩列表(ziplist)存储,这样可以节省内存。而String和Set 在存储数据时,也尽量选择使用int编码存储,这也是为了节省内存占用。这些都是Redis针对数据结构做的 优化
使用缓存技术的目的
并不是所有的缓存都只是为了提升速度,因为在分布式系统中,缓存机制实际上是系统级性能在设计的⼀个重要权衡⼿段。 ⽐如当某个数据库的负载⽐较⾼,接近系统瓶颈时,我们就可以使⽤缓存技术, 把负荷分担到其他数据库中,那么这⾥使⽤缓存的⽬的,主要就是负载均衡,⽽不是提升访问速度。
需要缓存机制的数据种类
-
不变性数据
- ⾸先是不变性数据,它代表数据永远不发⽣变化,或者是在较⻓⼀个时间段内不会发⽣变化,因此也可认为这部分数据是不变的。 这类数据就是可以优先考虑使⽤缓存技术的⼀种数据类型
-
弱⼀致性数据
- 弱一致性数据,它代表数据会经常发生变化,但是业务对数据的一致性要求不高,也就是说,不同 用戶在同一时间点上看到不完全一致的数据,都是可以接受的。
- 由于这类数据对一致性的要求比较低,所以在设计缓存机制时,你只需要实现最终一致性就可以了。这类数 据在实际业务中也比较多,比如业务的历史分析数据、一些搜索查找返回数据等,即使最近的一些数据没有 记录进去,关系也不大。
- 针对弱一致性的数据,我们通常使用的缓存失效机制是基于时间的失效方式,同时因为弱一致性的特性,你 可以比较灵活地选择数据存储技术,比如内存Cache,或者是分布式数据库Cache。你甚至可以基于负载均 衡的调度,来设计多层级缓存机制。
-
强⼀致性数据
-
强一致性数据,它是指代码数据会经常发生变化,而且业务对数据库的一致性要求非 常高,也就是说当数据发生变更后,其他用戶在系统中的任何地方,都应该看到的是更新后的数据。
-
那么,针对这种类型的数据,一般是不推荐你去使用缓存机制,因为这类数据在使用缓存时会比较复杂, 而且很容易会引入新的问题.
-
如果需要缓存:这种数据的缓存一定要采用修改同步的实现方式。也就是说,所有的数据修改都必须确保可以同步修改 缓存与数据库中的数据。
-
Redis学习资料
工具书:《Redis使用手册》
原理书:《Redis设计与实现》
上面两本书 是统一作者
实战书:《Redis开发与运维》
Redis的关键机制和操作系统、分布式系统的对应知识点