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函数,由这个函数将被处理的命令请求的相关信息发送给各个监视器。

    总结:

  • 相关阅读:
    JavaScript获取键盘事件
    Java 虚拟机的内存结构
    Java 实现 Http 请求工具类
    HTML5之FileReader文件读取接口
    使用 PLSQL 连接 Oracle9i 数据库
    使用 Navicate 连接 Oracle9i 数据库
    Eclipse 刚检出的项目 Build path 的时候提示 No action available
    Eclipse 中 Debug 调试 java 代码一直报 Source not found
    mongodb 客户端工具
    spring 国际化
  • 原文地址:https://www.cnblogs.com/gaojy/p/7156964.html
Copyright © 2011-2022 走看看