From 9c5f9edb7dfd171a17efa681c8919ec6a8956545 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 1 Apr 2018 14:24:58 +0800 Subject: [PATCH] auto commit --- notes/Redis.md | 20 +++++++++++------- pics/dda1608d-26e0-4f10-8327-a459969b150a.png | Bin 0 -> 21504 bytes 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 pics/dda1608d-26e0-4f10-8327-a459969b150a.png diff --git a/notes/Redis.md b/notes/Redis.md index 20de47e0..9e5bfa61 100644 --- a/notes/Redis.md +++ b/notes/Redis.md @@ -235,13 +235,17 @@ Redis 是内存型数据库,为了保证数据在断电后不会丢失,需 可以将快照复制到其它服务器从而创建具有相同数据的服务器副本。 -如果系统发生故障,将会丢失最后一次创建快照之后的数据。并且如果数据量很大,保存快照的时间也会很长。 +如果系统发生故障,将会丢失最后一次创建快照之后的数据。 + +如果数据量很大,保存快照的时间会很长。 ## 2. AOF 持久化 AOF 持久化将写命令添加到 AOF 文件(Append Only File)的末尾。 -对硬盘的文件进行写入时,写入的内容首先会被存储到缓冲区,然后由操作系统决定什么时候将该内容同步到硬盘,用户可以调用 file.flush() 方法请求操作系统尽快将缓冲区存储的数据同步到硬盘。因此将写命令添加到 AOF 文件时,要根据需求来保证何时将添加的数据同步到硬盘上,有以下同步选项: +对硬盘的文件进行写入时,写入的内容首先会被存储到缓冲区,然后由操作系统决定什么时候将该内容同步到硬盘,用户可以调用 file.flush() 方法请求操作系统尽快将缓冲区存储的数据同步到硬盘。 + +将写命令添加到 AOF 文件时,要根据需求来保证何时将添加的数据同步到硬盘上,有以下同步选项: | 选项 | 同步频率 | | :--: | :--: | @@ -361,7 +365,7 @@ def main(): 从事件处理的角度来看,服务器运行流程如下: -

+

# 十一、Redis 与 Memcached 的区别 @@ -391,26 +395,26 @@ Memcached 将内存分割成特定长度的块来存储数据,以完全解决 ## 缓存 -s使用 Redis 作为缓存,将热点数据放到内存中。 +将热点数据放到内存中。 ## 消息队列 -Redis 的 List 类型是双向链表,很适合用于消息队列。 +List 类型是双向链表,很适合用于消息队列。 ## 计数器 -Redis 这种内存数据库才能支持计数器的频繁读写操作。 +Redis 这种内存数据库能支持计数器频繁的读写操作。 ## 好友关系 -使用 set 类型的交集很容易就可以知道两个用户的共同好友。 +使用 Set 类型的交集操作很容易就可以知道两个用户的共同好友。 # 十三、数据淘汰策略 可以设置内存最大使用量,当内存使用量超过时施行淘汰策略,具体有 6 种淘汰策略。 | 策略 | 描述 | -| -- | -- | +| :--: | :--: | | volatile-lru | 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰 | | volatile-ttl | 从已设置过期时间的数据集中挑选将要过期的数据淘汰 | |volatile-random | 从已设置过期时间的数据集中任意选择数据淘汰 | diff --git a/pics/dda1608d-26e0-4f10-8327-a459969b150a.png b/pics/dda1608d-26e0-4f10-8327-a459969b150a.png new file mode 100644 index 0000000000000000000000000000000000000000..7bab8f1548ad8f7f588d1fc999b6aefda88f9deb GIT binary patch literal 21504 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 G{0{(Wr1*pY literal 0 HcmV?d00001