auto commit

This commit is contained in:
CyC2018
2018-06-11 09:26:46 +08:00
parent 7942d91efb
commit 582ca62941
2 changed files with 361 additions and 346 deletions

View File

@ -9,7 +9,6 @@
* [三、使用场景](#三使用场景)
* [缓存](#缓存)
* [计数器](#计数器)
* [应用限流](#应用限流)
* [消息队列](#消息队列)
* [查找表](#查找表)
* [交集运算](#交集运算)
@ -215,10 +214,6 @@ OK
Redis 这种内存数据库能支持计数器频繁的读写操作。
## 应用限流
限制一个网站访问流量。
## 消息队列
使用 List 数据类型,它是双向链表。
@ -241,8 +236,7 @@ Redis 这种内存数据库能支持计数器频繁的读写操作。
## 分布式锁
除了可以使用 SETNX 实现分布式锁之外,还可以使用官方提供的 RedLock 分布式锁实现。
除了可以使用 SETNX 命令实现分布式锁之外,还可以使用官方提供的 RedLock 分布式锁实现。
# 四、Redis 与 Memcached
@ -258,7 +252,7 @@ Redis 支持两种持久化策略RDB 快照和 AOF 日志,而 Memcached 不
## 分布式
Memcached 不支持分布式,只能通过在客户端使用一致性哈希这样的分布式算法来实现分布式存储,这种方式在存储和查询时都需要先在客户端计算一次数据所在的节点。
Memcached 不支持分布式,只能通过在客户端使用一致性哈希这样的分布式算法来实现分布式存储,这种方式在存储和查询时都需要先在客户端计算一次数据所在的节点。
Redis Cluster 实现了分布式的支持。
@ -290,7 +284,7 @@ Redis 可以为每个键设置过期时间,当键过期时,会自动删除
如果使用 Redis 来缓存数据时,要保证所有数据都是热点数据,可以将内存最大使用量设置为热点数据占用的内存量,然后启用 allkeys-lru 淘汰策略,将最近最少使用的数据淘汰。
作为内存数据库出于对性能和内存消耗的考虑Redis 的淘汰算法LRU、TTL实际实现上并非针对所有 key而是抽样一小部分 key 从中选出被淘汰 key,抽样数量可通过 maxmemory-samples 配置
作为内存数据库出于对性能和内存消耗的考虑Redis 的淘汰算法LRU、TTL实际实现上并非针对所有 key而是抽样一小部分 key 从中选出被淘汰 key。
# 七、持久化
@ -335,7 +329,7 @@ Redis 是内存型数据库,为了保证数据在断电后不会丢失,需
发布与订阅模式和观察者模式有以下不同:
- 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,发布者与订阅者不知道对方的存在,它们之间通过频道进行通信。
- 观察者模式是同步的,当事件触发时,主题会去调用观察者的方法;而发布与订阅模式是异步的
- 观察者模式是同步的,当事件触发时,主题会去调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,发布者向频道发送一个消息之后,就不需要关心订阅者何时去订阅这个消息。
<div align="center"> <img src="../pics//bee1ff1d-c80f-4b3c-b58c-7073a8896ab2.jpg" width="400"/> </div><br>
@ -355,7 +349,7 @@ Redis 服务器是一个事件驱动程序。
服务器通过套接字与客户端或者其它服务器进行通信,文件事件就是对套接字操作的抽象。
Redis 基于 Reactor 模式开发了自己的网络时间处理器,使用 I/O 多路复用程序来同时监听多个套接字,并将到达的时间传送给文件事件分派器,分派器会根据套接字产生的事件类型调用响应的时间处理器。
Redis 基于 Reactor 模式开发了自己的网络事件处理器,使用 I/O 多路复用程序来同时监听多个套接字,并将到达的事件传送给文件事件分派器,分派器会根据套接字产生的事件类型调用响应的事件处理器。
<div align="center"> <img src="../pics//9ea86eb5-000a-4281-b948-7b567bd6f1d8.png"/> </div><br>
@ -372,7 +366,7 @@ Redis 将所有时间事件都放在一个无序链表中,通过遍历整个
## 事件的调度与执行
服务器需要不断监听文件事件的套接字才能得到待处理的文件事件,但是不能监听太久,否则时间事件无法在规定的时间内执行,因此监听时间应该根据距离现在最近的时间事件来决定。
服务器需要不断监听文件事件的套接字才能得到待处理的文件事件,但是不能一直监听,否则时间事件无法在规定的时间内执行,因此监听时间应该根据距离现在最近的时间事件来决定。
事件调度与执行由 aeProcessEvents 函数负责,伪代码如下: