【读书笔记】redis核心技术与实战(一)

从极客时间的redis核心技术实战说起,整理相关的读书笔记。归纳redis的知识点。

开篇词 这样学Redis,才能技高一筹

redis遇到的坑可能主要存在与四个方面:

  • CPU使用上的坑,例如数据结构的复杂度、跨 CPU 核的访问;
  • 内存使用上的“坑”,例如主从同步和 AOF 的内存竞争;
  • 存储持久化上的“坑”,例如在 SSD 上做快照的性能抖动;
  • 网络通信上的“坑”,例如多实例时的异常网络丢包。

为了学习redis,我们可以从两个维度,三大主线入手。

首先,从系统维度上说,你需要了解 Redis 的各项关键技术的设计原理,从中掌握一些优雅的系统设计规范,例如run-to-complete 模型epoll 网络模型,这些可以应用到你后续的系统开发实践中。这里面包括的三大主线:

  • 高性能主线,包括线程模型、数据结构、持久化、网络框架;
  • 高可靠主线,包括主从复制、哨兵机制;
  • 高可扩展主线,包括数据分片、负载均衡。

在应用维度上,考虑“应用场景驱动”和“典型案例驱动”。形成知识网络,缓存和集群是 Redis 的两大广泛的应用场景。在这些场景中,本身就具有一条显式的技术链。比如说,提到缓存场景,你肯定会想到缓存机制、缓存替换、缓存异常等一连串的问题。
在这里插入图片描述

当然我们也可以逐渐的丰富起来这些知识点,比如找到每个知识点可能在什么场景下被使用到。
在这里插入图片描述
在“案例”层面,介绍数据结构的合理使用、避免请求阻塞和抖动、避免内存竞争和提升内存使用效率的关键技巧;在“场景”层面,我会重点介绍缓存和集群两大场景。

对于缓存而言,我会重点讲解缓存基本原理及淘汰策略,还有雪崩、穿透、污染等异常情况;对于集群来说,我会围绕集群方案优化、数据一致性、高并发访问等问题,和你聊聊可行的解决方案。

对于未来的展望,redis6.0中的多线程模型也是一个新的特性,可以进一步探索。

01 | 基本架构:一个键值数据库包含什么?

从一个简单的框架入手,分析一个键值数据库应该包括什么。不同键值数据库支持的 key 类型一般差异不大,而 value 类型则有较大差别。我们在对键值数据库进行选型时,一个重要的考虑因素是它支持的 value 类型。例如,Memcached支持的 value 类型仅为 String 类型,而 Redis 支持的 value 类型包括了 String、哈希表、列表、集合等。Redis 能够在实际业务场景中得到广泛的应用,就是得益于支持多样化类型的 value。

而键值数据库的基本操作集合包括了PUT/GET/DELETE/SCAN等操作。Memcached 和 Redis 都是属于内存键值数据库。大体来说,一个键值数据库包括了访问框架、索引模块、操作模块和存储模块四部分。在这里插入图片描述

由于redis在设计上使用的是网络框架接受网络包,新词我们需要考虑如何选择线程进程进行交互处理,也就是IO模型设计,这也是redis设计的一个亮点,单线程的epoll模型。

redis在索引模块上的设计是采用的hash表与memcached一样,而RocksDB使用的是跳表作为内存中的kv索引。

Redis 的持久化模块能支持两种方式:日志(AOF)和快照(RDB),这两种持久化方式具有不同的优劣势,影响到 Redis 的访问性能和可靠性。

02 | 数据结构:快速的Redis有哪些慢操作?

首先明确数据路的数据类型和底层数据结构。五种数据结构是最常问的问题,String, List, Hash, Sorted Set, Set。对应关系如下图所示。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值