HyperLogLog 算法是”大数据的基石”之一,可以做基数概要估算,即统计不重复的元素大概个数。适合统计数量巨大但无需知道具体元素的场景,存储 2^64 个不同元素的统计值,只需要 12KB 内存,标准差 0.81%。本文记录 HyperLogLog 的算法演化思路及 Redis 实现的数据结构。
Redis GeoHash Data Structure
Posted on
GeoHash(Geography Hash) 提供了一套存储、查询坐标元素的 API。可以高效的查询一定范围坐标内的元素。
Redis Underlying Data Structure
Posted on
之前总结过 Redis 的 8 种数据类型(String/List/Hash/Set/ZSet/Stream/Geo/HyperLogLog),而同一种数据类型可能根据数据特性、元素数据量的不同,底层的数据结构也会变化。这里记录一下 Redis 底层的数据结构。
Go defer unlock 总结
Posted on
实际工作中经常遇到 Lock 后需要 Unlock 的情况,这里总结一下优化过程。
Go Representable/Assignable/Comparable
Posted on
数据的类型判定严格程度:Representable(可表示,常量) < Assignable(可赋值) < Comparable(可等于比较) < Comparable(可顺序比较)
Go 综合面试题
Posted on
记录一些考点综合的面试题。
MAC OS Tips
Posted on
在 dock 中隐藏图标
Go Concurrency Patterns
Posted on
Do not communicate by sharing memory; instead, share memory by communicating.
并发编程的问题点总是和共享变量的方式有着重要而微妙的关系,Go+Pipeline 模式可以很好的处理并发设计。
本文参考下面文章,总结 Go 中的一些 goroutine 和 channel 的使用模式。
Connection Pool 连接池
Posted on
服务和服务之间建立网络连接是开发中常见的操作,但是随着连接的次数、长连接的数量增加会产生各种资源的瓶颈,连接池就应运而生了。这里以 Go 的sql.DB
为例,分析一下连接池注意点。
MQTT Protocol
Posted on
MQTT(Message Queuing Telemetry Transport)协议是 IMB 于 1999 年发布第一个版本,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。该协议广泛用于 IoT(物联网)、智能家居、小型设备。