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)来表示事务已经失败。
    

      

  • 相关阅读:
    项目实战15—企业级堡垒机 jumpserver
    ELK重难点总结和整体优化配置
    ELK 经典用法—企业自定义日志收集切割和mysql模块
    项目实战14—ELK 企业内部日志分析系统
    搭建内网映射服务
    超好用内网映射神器
    Linux官方源、镜像源汇总
    搭建企业级PPTP服务器
    Ansible的Inventory管理
    Ansible的快速入门
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/4238402.html
Copyright © 2011-2022 走看看