zoukankan      html  css  js  c++  java
  • Redis文档解析

    1.复制
    
    1,Redis 使用异步复制。
    2,功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步, 
    主服务器也可以继续处理命令请求。
    
    原理:
      无论是初次连接还是重新连接, 当建立一个从服务器时, 从服务器都将向主服务器发送一个 SYNC 命令。
    接到 SYNC 命令的主服务器将开始执行 BGSAVE , 并在保存操作执行期间, 将所有新执行的写入命令都保存到一个缓冲区里面。
    当 BGSAVE 执行完毕后, 主服务器将执行保存操作所得的 .rdb 文件发送给从服务器, 从服务器接收这个 .rdb 文件, 并将文件中的数据载入到内存中。
    之后主服务器会以 Redis 命令协议的格式, 将写命令缓冲区中积累的所有内容都发送给从服务器。
    你可以通过 telnet 命令来亲自验证这个同步过程: 首先连上一个正在处理命令请求的 Redis 服务器, 然后向它发送 SYNC 命令, 过一阵子, 你将看到 
    telnet 会话(session)接收到服务器发来的大段数据(.rdb 文件), 之后还会看到, 所有在服务器执行过的写命令, 都会重新发送到 telnet 会话来。
    即使有多个从服务器同时向主服务器发送 SYNC , 主服务器也只需执行一次 BGSAVE 命令, 就可以处理所有这些从服务器的同步请求。
    
    
    在网络连接短暂性失效之后, 主从服务器可以尝试继续执行原有的复制进程(process), 而不一定要执行完整重同步操作。
    这个特性需要主服务器为被发送的复制流创建一个内存缓冲区(in-memory backlog), 并且主服务器和所有从服务器之间都记录一个
    复制偏移量(replication offset)和一个主服务器 ID (master run id), 当出现网络连接断开时, 从服务器会重新连接, 
    并且向主服务器请求继续执行原来的复制进程:
    

      

    2.通信协议
    
    1,网络层
    客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。
    客户端和服务器发送的命令或数据一律以 
     (CRLF)结尾。
    2,回复
    状态回复(status reply)的第一个字节是 "+"
    错误回复(error reply)的第一个字节是 "-"
    整数回复(integer reply)的第一个字节是 ":"
    批量回复(bulk reply)的第一个字节是 "$"
    多条批量回复(multi bulk reply)的第一个字节是 "*"
    

      

    3.事务
    MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务的基础
    
    事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
    事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
    
    1.MULTI
    MULTI 命令用于开启一个事务,它总是返回 OK 。
    MULTI 执行之后, 客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行, 而是被放到一个队列中, 
    当 EXEC 命令被调用时, 所有队列中的命令才会被执行。
    另一方面, 通过调用 DISCARD , 客户端可以清空事务队列, 并放弃执行事务。
    
    MULTI
    OK
    > INCR foo
    QUEUED
    > INCR bar
    QUEUED
    > EXEC
    1) (integer) 1
    2) (integer) 1
    
    即使事务中有某条/某些命令执行失败了, 事务队列中的其他命令仍然会继续执行 —— Redis 不会停止执行事务中的命令。
    Redis 在事务失败时不进行回滚,而是继续执行余下的命令
    
    2.DISCARD
    当执行 DISCARD 命令时, 事务会被放弃, 事务队列会被清空, 并且客户端会从事务状态中退出:
    redis> SET foo 1
    OK
    redis> MULTI
    OK
    redis> INCR foo
    QUEUED
    redis> DISCARD
    OK
    redis> GET foo
    "1"
    
    3.WATCH
    被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。 
    如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回空多条批量回复(null multi-bulk reply)来表示事务已经失败。
    

      

  • 相关阅读:
    Generate Parentheses
    Length of Last Word
    Maximum Subarray
    Count and Say
    二分搜索算法
    Search Insert Position
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/4238402.html
Copyright © 2011-2022 走看看