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

    总结:

  • 相关阅读:
    Ruby笔记四(数组)
    中央直属企业名单【中国级别最高的169家企业】(转)找工作按这个来
    循环pthread_create导致虚拟内存上涨(续1)
    除掉行数小程序
    client comserver编译配置运行详细说明
    网络监听技术概览(转待看)
    查看 linux系统版本,内核,CPU,MEM,位数的相关命令(实验)
    项目中Shell脚本说明(待完善)
    多线程 or 多进程 (实验1)
    循环pthread_create导致虚拟内存上涨(续2)
  • 原文地址:https://www.cnblogs.com/gaojy/p/7156964.html
Copyright © 2011-2022 走看看