Liang Wang

5 posts published

基于 golang 从零到一实现时间轮算法

0 前言近期计划攻坚一个新的专题系列——如何基于 golang 从零到一实现 redis. 这里选择的学习素材是 hdt3213 大佬于 github 上开源的 godis 项目. 在大佬的实现中,充分利用了 golang 的特性,将 redis 存储层由单线程模型转为并发模型,其中在实现数据的 expire 机制时,采用的是单机时间轮模型进行过期数据的删除操作. godis 项目开源地址:http://github.com/HDT3213/godis godis 时间轮代码:http://github.com/HDT3213/godis/blob/master/lib/timewheel/timewheel.go 实际上,在我之前分享个人项目——分布式定时器 xtimer 中也有到了时间轮算法,这部分内容具有一定共性.

Linux文本三剑客超详细教程---grep、sed、awk

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。 1、grep1.1 什么是grep和egrepLinux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。 grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。 egrep = grep -E:扩展的正则表达式 (除了\< , \> , \b

万字解析 go 语言分布式消息队列 NSQ

0 前言本期和大家一起探讨一款完全基于 go 语言实现的分布式消息队列——nsq. 有关于消息队列 Message Queue 的概念及作用,大家可以参考我之前发表的文章——万字长文解析如何基于Redis实现消息队列,这些基础知识本文不再赘述. nsq 是一款基于 go 语言开发实现的分布式消息队列组件,在 golang 世界中拥有着很高的认可度和流行性,截止今日在 github 上的 stars 数已高达 23 k. 本期会涉及大量对 nsq 的源码走读环节,主要包含: nsq 客户端:https://github.com/nsqio/go-nsq . 本文走读源码版本为:v1.1.0.nsq 服务端:https://github.com/nsqio/nsq . 本文走读源码版本为:v1.

深入底层:Go语言从零构建区块链(二):PoW工作证明机制

Build Blockchain from Scratch with Golang DirectoryDirectory 前言 项目重构 共识机制 添加Nonce PoW实现 调试带PoW的区块链系统 总结 前言在上一章中我们了解了区块是什么以及区块与区块链之间的关系。在这一章中我们将拓宽区块的头部信息,并讲解区块如何合法的被添加进区块链中。 项目重构在上一章中,我们所有的代码都写在了main.go中,这显然不利于我们继续构建项目。我们希望main.go只用于最后启动我们的区块链系统,为此我们需要将设计的区块与区块链移植其它文件夹中,这也会帮你go语言的代码管理机制。 首先我们在goblockchain文件夹下建立一个新的文件夹blockchain,在blockchain下分别创建block.go,blockchain.go,之后我们会将相关结构体与函数放入其中。创建utils文件夹,在其下创建util.go用以存放一些龙套函数。创建constcoe文件夹在其下创建constcoe.go用于储存一些全局常量。 打开utils.go,引入以下包。 //util.go package utils import ( "bytes" "encoding/binary" "log" )然后构建一个简单的错误处理函数。 //util.

深入底层:Go语言从零构建区块链(一): Hello, Blockchain

Build Blockchain from Scratch with Golang DirectoryDirectory 前言 创建项目 区块与区块链 哈希 区块创建与创始区块 运行区块链系统 总结 前言有时觉得前言什么的可以省略,但作为一个教程还是应该在最开始的时候说两句。 这个系列的教程目的是使用Golang由浅入深地还原PoW共识机制最基础区块链系统(参照比特币),适合想要快速入门区块链核心技术的读者,当然也适合刚学完Go基础语法希望练手的读者。相较于网络上其它Go语言实现区块链的教程,本系列教程以最终建立一个可以分布式运行的区块链系统为目标,使用新版本的Golang(v1.17)及相关包,在还原的过程中会尽量说明一些常规教程忽视的细节,给出所有的代码。 大部分人对于区块链技术的学习常常停留在表象,了解了UTXO模型,共识机制,P2P网络后,总是迫不及待地就想用区块链往所有涉及隐私与安全的问题里套。我始终持有的观点是,可以允许区块链在各种应用场景中试错,但不应该过于推崇区块链,它不是万能的,要学习区块链就应该了解其本质,从事物的两面性去研究它。举个例子,如果我们把区块链当作一个分布式的数据库看待,那么它的性能无疑是拉跨的,但是如果充分理解区块链的本质,就能够明白比特币为什么仅仅用一段代码就能够在全球没有第三方机构的参与下实现资产信息的长久保存,稳定运行超过五年,感叹其精妙之处。 如果想要了解区块链技术的本质,了解区块链技术的优缺点以及可能的研究方向,最直接的办法无疑是阅读比特币源码。但是比特币源码使用C进行编写,

京ICP备19016179号-1