zoukankan      html  css  js  c++  java
  • Redis设计与实现——独立功能的实现

    发布和订阅

    频道的订阅和退订

    struct  redisServer{
        //键是被订阅者频道  ,键是一个链表,记录所有订阅这个频道的客户端
        dict  *publish_channels
    }

    订阅实现:                                                                                                退订实现:

    模式的订阅和退订

    模式指定的topic通配化。

     

    发送消息

    事务

     事务首先以一个MULTI命令为开始,接着将多个命令放在事务中,最后由EXEC命令将这个事务提交(commit)给服务器执行。

    事务从开始到结束会经历3个阶段:事务开始,命令入队,事务执行。

    watch命令的实现

    watch命令是一个乐观锁,它可以在EXEC命令执行前,监视任意数量的数据库键,在EXEC执行时,检查被监视的键是否被另一个client修改过,如果是的话,则拒绝事务,并向client返回事务失败的空回复。

    一个完整的WATCH事务执行过程

    1) c10086 > WATCH "name"

    2)之后c10086 > MULTI  

               SET  “name”  "Peter"

    3)之后c999 > SET  “name”  “john”

    4)c999执行的这个SET命令,使得正在监视“name”键的所有客户端柏阔c10086的REDIS_DIRTY_CAS标识被打开,之后c10086执行EXEC命令因此失败,服务器拒绝执行事务。只有REDIS_DIRTY_CAS标识未被打开,服务器才会执行客户端提交的事务。

    事务ACID

    慢查询日志

     

    监视器

     通过执行MONITOR命令,client可以将自己变成监视器,实时地接收并打印出服务器当前处理的命令请求相关信息。

    成为监视器

    向监视器发送命令信息

    服务器在每次处理命令请求之前,都会调用replicationFeedMonitors函数,由这个函数将被处理的命令请求的相关信息发送给各个监视器。

    总结:

  • 相关阅读:
    运用VS制作安装包
    return的总结
    Swift UIAlertController、UISegmentedControl
    Swift 菊花、UIPageControl和UIProgressView
    Swift UITextField各种属性的设置
    Swift 发送邮件和发短信
    Swift GCD
    swift 定义枚举和结构体 及使用
    iOS怎么来实现关闭自动锁屏
    IOS开发 清空数组正确方法
  • 原文地址:https://www.cnblogs.com/gaojy/p/7156964.html
Copyright © 2011-2022 走看看