From b3a7705fb6330a273b6a67deac59290f84c95aad Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 18 Mar 2018 14:51:22 +0800 Subject: [PATCH] auto commit --- notes/Redis.md | 118 +++++++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 52 deletions(-) diff --git a/notes/Redis.md b/notes/Redis.md index ef2dcf74..b882428b 100644 --- a/notes/Redis.md +++ b/notes/Redis.md @@ -1,34 +1,48 @@ -* [Redis 是什么](#redis-是什么) -* [五种基本类型](#五种基本类型) +* [一、Redis 是什么](#一redis-是什么) +* [二、五种基本类型](#二五种基本类型) * [1. STRING](#1-string) * [2. LIST](#2-list) * [3. SET](#3-set) * [4. HASH](#4-hash) * [5. ZSET](#5-zset) -* [键的过期时间](#键的过期时间) -* [发布与订阅](#发布与订阅) -* [事务](#事务) -* [持久化](#持久化) +* [三、键的过期时间](#三键的过期时间) +* [四、发布与订阅](#四发布与订阅) +* [五、事务](#五事务) +* [六、持久化](#六持久化) * [1. 快照持久化](#1-快照持久化) * [2. AOF 持久化](#2-aof-持久化) -* [复制](#复制) - * [1. 从服务器连接主服务器的过程](#1-从服务器连接主服务器的过程) - * [2. 主从链](#2-主从链) -* [处理故障](#处理故障) -* [分片](#分片) -* [事件](#事件) - * [1. 事件类型](#1-事件类型) - * [2. 事件的调度与执行](#2-事件的调度与执行) -* [Redis 与 Memcached 的区别](#redis-与-memcached-的区别) -* [Redis 适用场景](#redis-适用场景) -* [数据淘汰策略](#数据淘汰策略) -* [一个简单的论坛系统分析](#一个简单的论坛系统分析) +* [七、复制](#七复制) + * [从服务器连接主服务器的过程](#从服务器连接主服务器的过程) + * [主从链](#主从链) +* [八、处理故障](#八处理故障) +* [九、分片](#九分片) + * [1. 客户端分片](#1-客户端分片) + * [2. 代理分片](#2-代理分片) + * [3. 服务器分片](#3-服务器分片) +* [十、事件](#十事件) + * [事件类型](#事件类型) + * [事件的调度与执行](#事件的调度与执行) +* [十一、Redis 与 Memcached 的区别](#十一redis-与-memcached-的区别) + * [数据类型](#数据类型) + * [数据持久化](#数据持久化) + * [分布式](#分布式) + * [内存管理机制](#内存管理机制) +* [十二、Redis 适用场景](#十二redis-适用场景) + * [缓存](#缓存) + * [消息队列](#消息队列) + * [计数器](#计数器) + * [好友关系](#好友关系) +* [十三、数据淘汰策略](#十三数据淘汰策略) +* [十四、一个简单的论坛系统分析](#十四一个简单的论坛系统分析) + * [文章信息](#文章信息) + * [点赞功能](#点赞功能) + * [对文章进行排序](#对文章进行排序) * [参考资料](#参考资料) -# Redis 是什么 +# 一、Redis 是什么 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 @@ -36,7 +50,7 @@ Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。 -# 五种基本类型 +# 二、五种基本类型 | 数据类型 | 可以存储的值 | 操作 | | -- | -- | -- | @@ -188,7 +202,7 @@ OK 2) "982" ``` -# 键的过期时间 +# 三、键的过期时间 Redis 可以为每个键设置过期时间,当键过期时,会自动删除该键。 @@ -196,7 +210,7 @@ Redis 可以为每个键设置过期时间,当键过期时,会自动删除 过期时间对于清理缓存数据非常有用。 -# 发布与订阅 +# 四、发布与订阅 发布与订阅实际上是观察者模式,订阅者订阅了频道之后,发布者向频道发送字符串消息会被所有订阅者接收到。 @@ -205,13 +219,13 @@ Redis 可以为每个键设置过期时间,当键过期时,会自动删除 1. 如果订阅者读取消息的速度很慢,会使得消息不断积压在发布者的输出缓存区中,造成内存占用过多; 2. 如果订阅者在执行订阅的过程中网络出现问题,那么就会丢失断线期间发送的所有消息。 -# 事务 +# 五、事务 Redis 最简单的事务实现方式是使用 MULTI 和 EXEC 命令将事务操作包围起来。 MULTI 和 EXEC 中的操作将会一次性发送给服务器,而不是一条一条发送,这种方式称为流水线,它可以减少客户端与服务器之间的网络通信次数从而提升性能。 -# 持久化 +# 六、持久化 Redis 是内存型数据库,为了保证数据在断电后不会丢失,需要将内存中的数据持久化到硬盘上。 @@ -239,13 +253,13 @@ always 选项会严重减低服务器的性能;everysec 选项比较合适, 随着服务器写请求的增多,AOF 文件会越来越大;Redis 提供了一种将 AOF 重写的特性,能够去除 AOF 文件中的冗余写命令。 -# 复制 +# 七、复制 通过使用 slaveof host port 命令来让一个服务器成为另一个服务器的从服务器。 一个从服务器只能有一个主服务器,并且不支持主主复制。 -## 1. 从服务器连接主服务器的过程 +## 从服务器连接主服务器的过程 1. 主服务器创建快照文件,发送给从服务器,并在发送期间使用缓冲区记录执行的写命令。快照文件发送完毕之后,开始向从服务器发送存储在缓冲区中的写命令; @@ -253,13 +267,13 @@ always 选项会严重减低服务器的性能;everysec 选项比较合适, 3. 主服务器每执行一次写命令,就向从服务器发送相同的写命令。 -## 2. 主从链 +## 主从链 随着负载不断上升,主服务器可能无法很快地更新所有从服务器,或者重新连接和重新同步从服务器将导致系统超载。为了解决这个问题,可以创建一个中间层来分担主服务器的复制工作。中间层的服务器是最上层服务器的从服务器,又是最下层服务器的主服务器。