diff --git a/README.md b/README.md index f35e1ec..990d6af 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ #### [分布式系统发展历程(已更新)](/docs/fenbushi.md) #### [分布式系统](/docs/redis-code.md) #### [mybatis源码解析--未更新](/docs/mybatis-code.md) -#### [redis专题缓存的优势及如何进行集群--更新1/3](/docs/redis-good.md) +#### [redis 使用与进阶以及如何进行集群--更新1/3](/docs/redis-good.md) #### [spring源码--未更新](/docs/redis-code.md) #### [分布式治理框架-dubbo - zk - 解析--未更新](/docs/redis-code.md) #### [通信mq-Kafka--未更新](/docs/redis-code.md) diff --git a/docs/redis-good.md b/docs/redis-good.md index 9e72021..fb94445 100644 --- a/docs/redis-good.md +++ b/docs/redis-good.md @@ -102,5 +102,23 @@ redis有成熟的框架redission + **Redis多路复用机制(看不看都行)** + + linux的内核会把所有外部设备都看作一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令, + 返回一个 file descriptor(文件描述符)。对于一个socket的读写也会有响应的描述符,称为socketfd(socket 描述符)。 + 而IO多路复用是指内核一旦发现进程指定的一个或者多个文件描述符IO条件准备好以后就通知该进程 + IO多路复用又称为事件驱动,操作系统提供了一个功能,当某个socket可读或者可写的时候,它会给一个通知。 + 当配合非阻塞socket使用时,只有当系统通知我哪个描述符可读了,我才去执行read操作,可以保证每次read都能读到有效数据。 + 操作系统的功能通过select/pool/epoll/kqueue之类的系统调用函数来使用,这些函数可以同时监视多个描述符的读写就绪情况 + ,这样多个描述符的I/O操作都能在一个线程内并发交替完成,这就叫I/O多路复用,这里的复用指的是同一个线程 + 多路复用的优势在于用户可以在一个线程内同时处理多个socket的 io请求。达到同一个线程同时处理多个IO请求的目的。 + 而在同步阻塞模型中,必须通过多线程的方式才能达到目的 + + **Redis(2.6以后)--lua脚本** + + 1. 减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行 + 2. 原子操作,redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件 + 3. 复用性,客户端发送的脚本会永远存储在redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑 +