-
分布式锁-01-基于 Zookeeper 实现分布式锁
Zookeeper
Zookeeper
ZooKeeper的架构通过冗余服务实现高可用性。
因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。
ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务,更新是全序的。
系统架构
上图为系统架构,左边区域表示...
2018-09-08 02:30:55 |
Distributed
-
分布式锁-02-SQL 数据库实现分布式锁
实现方式
基于数据库的锁实现也有两种方式,一是基于数据库表,另一种是基于数据库排他锁。
数据库表的增删
思路
具体使用的方法,当需要锁住某个方法时,往该表中插入一条相关的记录。这边需要注意,方法名是有唯一性约束的,如果有多个请求同时提交到数据库的话,数据库会保证只有一个操作可以成功,那么我们就可以认为操作成功的那个线程获得了该方法的锁,可以执行方法体内容。
执行完毕,需要delet...
2018-09-08 02:14:05 |
Distributed
-
22讲通关go-07-错误处理:如何通过 error、deferred、panic 等处理错误?
07 错误处理:如何通过 error、deferred、panic 等处理错误?
上节课我为你讲解了结构体和接口,并留了一个小作业,让你自己练习实现有两个方法的接口。
现在我就以“人既会走也会跑”为例进行讲解。
首先定义一个接口 WalkRun,它有两个方法 Walk 和 Run,如下面的代码所示:
type WalkRun interface {
Walk()
Run(...
2018-09-07 01:51:23 |
Lang
-
22讲通关go-06 struct 和 interface:结构体与接口都实现了哪些功能?
06 struct 和 interface:结构体与接口都实现了哪些功能?
上节课我留了一个思考题:方法是否可以赋值给一个变量?如果可以,要怎么调用它呢?
答案是完全可以,方法赋值给变量称为方法表达式,如下面的代码所示:
age:=Age(25)
//方法赋值给变量,方法表达式
sm:=Age.String
//通过变量,要传一个接收者进行调用也就是age
sm(age)
我们...
2018-09-07 01:51:23 |
Lang
-
22讲通关go-05 函数和方法:Go 语言中的函数和方法到底有什么不同?
05 函数和方法:Go 语言中的函数和方法到底有什么不同?
上一讲的思考题是创建一个二维数组并使用。
上节课,我主要介绍了一维数组,其实二维数组也很简单,仿照一维数组即可,如下面的代码所示:
aa:=[3][3]int{}
aa[0][0] =1
aa[0][1] =2
aa[0][2] =3
aa[1][0] =4
aa[1][1] =5
aa[1][2] =6
aa[...
2018-09-07 01:51:23 |
Lang
-
22讲通关go-04-04 集合类型:如何正确使用 array、slice 和 map?
回顾
上节课的思考题是练习使用 for 循环中的 continue,通过上节课的学习,你已经了解 continue 是跳出本次循环的意思,现在我就以计算 100 以内的偶数之和为例,演示 continue 的用法:
sum := 0
for i:=1; i<100; i++{
if i%2!=0 {
continue
}
sum+=i
}
...
2018-09-07 01:51:23 |
Lang
-
22讲通关go-03-03 控制结构:if、for、switch 逻辑语句的那些事儿
03 控制结构:if、for、switch 逻辑语句的那些事儿
在上节课中我留了一个思考题,在一个字符串中查找另外一个字符串是否存在,这个其实是字符串查找的功能,假如我需要在“老马啸西风”这个字符串中查找“老马”,可以这么做:
i:=strings.Index("老马啸西风","老马")
这就是 Go 语言标准库为我们提供的常用函数,以供我们使用,减少开发。
这节课我们继续讲解 G...
2018-09-07 01:51:23 |
Lang
-
22讲通关go-02-data type 02 数据类型:你必须掌握的数据类型有哪些?
02 数据类型:你必须掌握的数据类型有哪些?
上节课的思考题是打印出自己的名字,这个作业比较简单,属于文本的替换,你只需要把我示例中的”Hello 世界”修改成自己的名字即可,比如以我的名字为例,替换为“飞雪无情”。
经过上一节课的学习,你已经对 Go 语言的程序结构有了初步了解,也准备好了相应的开发环境。
但是一个完整的项目需要更复杂的逻辑,不是简单的“Hello 世界”可相比的。这...
2018-09-07 01:51:23 |
Lang