Maple's Blog.

Maple's Blog.

keep coding and having fun

Red Lock
在分布式版本的算法里我们假设我们有 N 个 Redis master 节点,这些节点都是完全独立的,我们不用任何复制或者其他隐含的分布式协调算法。我们已经描述了如何在单节点环境下安全地获取和释放锁。因此我们理所当然地应当用这个方法在每个单节点里来获取和释放锁。在我们的例子里面我们把 N 设成 5,这个数字是一个相对比较合理的数值,因此我们需要在不同的计算机或者虚拟机上运行 5 个 master 节点来保证他们大多数情况下都不会同时宕机。一个客户端需要做如下操作来获取锁: 获取当前时间(单位是毫秒)。 轮流用相同的 key 和随机值在 N 个节点上请求锁,在这一步里,客户端在每个 mas...
Kafka-node 的使用 Demo
Kafka 是基于磁盘文件顺序存储而设计的类 AMQP 消息队列服务,支持集群和数据备份。有着超高的稳定性和吞吐量。 前段时间我司拟推广 Kafka,也乘机借着项目学了下 Kafka 的相关知识,虽然最后还是一直决定使用 ONS.. 在 Node 环境使用量比较高的是 Kafka-node这个包。所以本文主要讲诉这个包的一些简单用例。 关于 Lower Level Consumer 和 High Level Consumer 的区别 一开始在不怎么了解的情况下,一直分不清楚两者的关系。后来在一大佬的文章中得到了解释: 很多时候,客户程序只是希望从Kafka读取数据,不太关心消息 off...
MySQL 外键
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。 说白了就是两张表, A 表的某个字段必须和 B 表的某个字段关联起来。 B 表那个字段如果有值 value,A 表的这个字段才能使用 value 这个值。如果 B 表该字段不存在的值,是无法作为 A 表该字段的值来使用的。 这样就可以保证在写入数据的时候,不会因为 B 表的数据未写入而 A 表的数据写入成功导致数据不一致。 也能避免当 A 表关联 B 表字段。B 表擅自删除导致 A 无法关联到 B 表。 其父表被关联的字段,称为子表的外键。 这里有以下几个特点: 父表不存在的值,子表是无法引用。 子表...
VMware 虚拟机硬盘文件扩容
因为开发和测试需要,在家里常年跑了 vmware 虚拟机。然后通过 MAC 端的 VMware Fusion 对其进行连接。在上面操作。 前段时间 win10 推送了一个大版本更新,需要升级大版本就要把老的数据备份,然而我之前分配的硬盘空间不足以进行升级。而我实在不想把开虚拟机的电脑接到显示器上,尤其是我知道那张显卡已经基本无法显示了。 我想到了 VMware 一向都有完善的命令行工具,是否可以通过命令行工具来实现对硬盘文件的扩容。查阅了网上资料,卧槽,还真的可以的。 123456789101112131415161718192021222324252627282930313233343...
JavaScript Proxy 对象
Usage123let target = {};let handler = {};let p = new Proxy(target, handler); target: 目标对象。可以是任何类型的对象,甚至是另一个代理。 handler: 一个对象,其属性是当实行一个操作是定义代理的行为的函数。 Example12345678910111213let handler = { get: function(target, name) { return name in target ? target[name] ...
Kafka auto.offset.reset 值
首先附上别人的文章: earliest当各分区下有已提交的 offset 时,从提交的 offset 开始消费;无提交的 offset 时,从头开始消费 latest当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据 nonetopic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的 offset,则抛出异常 作者:lishuangzhe7047 来源:CSDN 原文:https://blog.csdn.net/lishuangzhe7047/article/detail...
iterator(迭代器)
Node 版本: 1234567891011121314151617function * hello(max) { let count = 0; let a = 1, b = 1, tmp = 1; while(count < max) { yield a; tmp = a; a = b; b = tmp + b; count ++; }}for(const i of hello(500)) { console.log(i); ...
Python with as 的作用
Python with as 的作用这几天在入门 Python,https://learnxinyminutes.com/docs/python3/,看到 with as,这边说了一句 # Instead of try/finally to cleanup resources you can use a with statement 如果不使用 try/finally 来清理资源,你可以使用声明这个功能。 123with open("1.txt") as f for line in f: print(line) 首先说下 with as 的...
MySQL 事务
大学上课的时候我想老师基本都讲过事务这件事,就是一旦一件事件涉及多条数据库操作,当一条操作失败时,理应当把之前的操作全部回滚。 我们最常用的 MySQL 引擎之一的 InnoDB 支持事务。 事务 ACID 指的是 Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)。 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性:在事务开始之前和事务...
Node 和观察者设计模式
观察者设计模式观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 总的来说,例如 Node 的事件机制。除非是一个不包含异步的程序(如果没有异步逻辑,那这个程序在执行结束前都不会有事件循环),否则一般程序在拥有带监听的 IO 事件(或者是网络套接字)的观察者时,就会通过线程层(libuv)不断的是轮询这些事件有没有完成。而系统在完成 IO 之后,将...
avatar
Maple
coding & have fun