前言
温故知新,最近自己在复习之前零散的知识点,想通过脑图的方式将每一块知识内容串在一起,比如redis,多线程,jvm,spring等等。
同时希望我的总结也可以帮助到其他人,所以打算写这个系列的文章。就叫它“一张脑图系列”。
这篇文章是我复习完redis之后的总结,共有四小节,每小节最后会有本节的脑图。
由于文章是以相对简练的描述进行总结,适用人群:
- 想要先概览redis,然后对细节部分逐个击破
- 有redis使用经验,想要短时间复习redis大部分知识点
01.Redis 基础
缓存
- 应用内缓存:Map、EH Cache
- 应用外缓存(缓存组件):Memcache、Redis
存储结构
- remote dictionary server(远程字典服务器)
- 以字典结构存储数据,允许其他应用通过TCP读写字典中的内容
redis启动&停止
- 可执行文件
- Redis-server Redis服务器
- Redis-benchmark Redis性能测试工具
- redis-check-aof Aof文件修复工具
- redis-check-dump Rdb文件检查工具
- Redis-sentinel Sentinel服务器(2.8以后)
- 直接启动(默认端口6379) → redis-server …/redis.conf
- 停止 → redis-cli shutdown
- redis收到shutdown命令后,先断开所有客户端连接
- 然后根据配置执行持久化,最终完成退出
- 强制杀线程,会导致数据丢失。∵redis可能正在将内存中的数据同步到硬盘
五种数据类型及应用场景
字符串类型
- 使用场景(最大容量512M)
- 存储用户的邮箱、json化的对象、图片
- 数据结构
- int → 存放整型数据
- SDS(simple dynamic string) → 存放字节 / 字符&浮点型数据
- 根据字符串长度调整Header,从而节省内存
列表类型(双向)
- 使用场景
- 最新消息排行、消息队列
- 数据结构
- v3.2:linkedlist | ziplist → quicklist(由ziplist组成的双向链表)
- linkedlist → 插入复杂度低,但内存开销大
- ziplist → 存储效率高,但需要频繁申请和释放内存。∵存储在一段连续内存
- 当元素个数和单个长度小,采用ziplist
hash类型
- 使用场景
- 存储对象(每一个field-value相当于对象的属性和属性值)
- 数据结构
- 数据量小时,用ziplist
- 否则使用hashtable
- dictEntry → 内部链(key-value+next指针)
- dictht → 存放buckets
- dict → 扩容/缩容时,dictht的迁移<