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

    总结:

  • 相关阅读:
    字母运算
    7.5 字典序全排列
    5
    4 c#
    c# 贪吃蛇源码
    【Django】django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required;
    redis 存储验证码 基本使用
    Git 的基本使用
    docker(专业版) 安装过程报错
    router.push query 路由 跳转 传参使用
  • 原文地址:https://www.cnblogs.com/gaojy/p/7156964.html
Copyright © 2020-2023  润新知