Redis 地理位置信息功能
Redis 在 3.2 版本就新增了 GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。
GEO 功能是 Redis 的另一位作者 Matt Stancliff 借鉴 NoSQL 数据库 Ardb 实现的。
基础 API
增加地理位置信息:geoadd key longitude latitude member [longitude latitude member ...]
longitude、latitude、member 分别是该地理位置的 ...
Redis 的基础数据结构和 API
Redis 提供的基础数据结构有五种:
字符串 string
哈希表 hash
列表 list
集合 set
有序集合 zset
全局命令
查看所有键:keys *
会遍历所有键,时间复杂度为 O(n)
如果保存了大量的键,禁止使用
键总数:dbsize
键是否存在:exists key
删除:del key [key ...]
添加过期时间:expire key seconds
返回剩余时间:ttl
键的数据结构:type key
字符串
Redis 最基础的数据结构,其它的数据结构 ...
Kubernetes 基础原理
Kubernetes 名字源自于希腊语,意为「舵手」或「飞行员」,前身是 Google 内部运行多年的集群管理系统 Borg。2014 年 6 月使用 Go 语言重写并开源。
Kubernetes 的成功与 Docker 的成功并不相同。Docker 靠的是优秀的理念,以一个「好点子」引爆了一个时代。Kubernetes 的成功不仅有 Google 深厚的技术功底作为支撑,而且有领先时代的设计理念,更加关键的是 Kubernetes 的出现符合所有云计算大厂的切身利益,有着业界巨头不遗余力的广泛支持,所以 ...
zsh shell 脚本编程
zsh shell 是由 Paul Falstad 开发的开源 Unix shell,吸取了现有的 Shell 的设计理念,增加了许多独特的特性,是为程序员设计的一款无所不能的高级 Shell。
模块
zmodload 命令是 zsh 模块的管理接口。不加任何参数的 zmodload 命令会显示 zsh shell 中安装的模块:
123456789101112> zmodloadzsh/completezsh/complistzsh/datetimezsh/langinfozsh/mainzsh/p ...
Go 语言实现依赖注入
依赖注入是常见的解耦方式之一。如果系统没有解耦,单元测试就无从谈起。依赖注入指的是显式指定它所需要的功能来执行其任务。早在 1996 年,Robert Martin 就写了一篇文章,名为 The Dependency Inversion Principle 依赖转置原则。
隐式接口实现依赖注入
在 Go 语言中实现依赖注入很容易,不需要额外的库。如果建一个非常的 Web 程序,写一个工具函数,用于日志采集:
123func LogOutput(message string) { fmt.Print ...
分布式共识:Paxos 算法
世界上只有一种共识协议,就是 Paxos,其他所有共识算法都是 Paxos 的退化版本。—— Mike Burrows,Google Chubby 作者
Paxos 是由 Leslie Lamport(就是大名鼎鼎的 LaTeX 中的「La」)提出的一种基于消息传递的协商共识算法,是当今分布式系统最重要的理论基础,几乎就是「共识」二字的代名词。这个极高的评价出自于提出 Raft 算法的论文(《一种可以让人理解的共识算法(In Search of an Understandable Consensus A ...
Windows 批处理脚本语法
Unreal 中用了不少 .bat 脚本,因此学习一下 .bat 语法。好吧,确实属于一个古董玩意,相比于 Python,最大的好处是系统原生的支持,不需要额外配置环境。
下文以 Unreal 的 switchboard.bat 为例学习一下 .bat 语法
批处理
批处理文件(batch file)包含了一系列 DOS 命令,通常用于自动执行重复性任务。用户只需双击批处理文件便可执行任务。
关闭回显
默认情况下,bat 会显示出执行的命令,通常对于最终用户来讲,它并不是特别关心执行了什么。因此,基本上 ...
编程实践中的日期与时间
如果项目需要考虑国际化的时候,时间和日期是代码中必须关注的一个内容。
基础知识
GMT(Greenwich Mean Time):英国格林威治时间(世界标准时间),是 本初子午线 上的地方时,是 0 时区的区时。
本初子午线是指地球上的零度经线。国际上将通过英国伦敦格林尼治天文台原址的那条经线称为 0° 经线,也叫本初子午线
以 太阳 为基础(类似日晷)
UTC:通用协调时 (UTC, Universal Time Coordinated),理论上与 GMT 时间相等(除非出现了 闰秒 ,日常使 ...
Unicode 编码的基础知识
Unicode 之前
大陆使用的是 GB2312(扩展的还有 GBK、GB18030)
台湾:Big5
美国:ASCII(ISO-8859-1)
拉丁语系:ISO/IEC 8859-1 ~ ISO/IEC 8859-15(中间废弃了 12)
上述这些标准在本地区使用当然没问题,但是如果要跨地区交流就会出现问题。因为同样的码值体系中对应的字是不同的。如果要在同一篇文档里显示不同的编码的文字,那是一个不可能的任务。
Unicode
Unicode 的发明就是为了解决上面的问题:
鼎鼎大名的国际标准化组织 ...
编译原理:用 Rust 编写一个简单的词法分析器
词法分析是编译器和解释器的第一个环节,相对而言也比较简单。词法分析器(有时也称为单元生成器(tokenizer)或者扫描器(scanner)) 将源代码转换为词法单元,这个过程称为词法分析。
本文代码设计复刻自《用Go语言自制解释器》词法分析器一章,文章结构、编码过程根据笔者理解重新阐述。
词法分析器
词法分析的过程会遍历输入的字符,然后逐个输出识别的词法单元。这个过程不需要缓冲区,也不需要保存词法单元,只需要不断地输出下一个 Token,我们可以考虑使用迭代器来完成这个设计。
定义词法单元
假设有这样 ...