随笔分类 - 用 Golang 实现 Redis
摘要:RDB 文件使用二进制方式存储 Redis 内存中的数据,具有体积小、加载快的优点。本文主要介绍 RDB 文件的结构和编码方式,并借此探讨二进制编解码和文件处理方式,希望对您有所帮助。 本文基于 RDB version9 编写, 完整解析器源码在 github.com/HDT3213/rdb RDB
阅读全文
摘要:为了支持多个命令的原子性执行 Redis 提供了事务机制。 Redis 官方文档中称事务带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作:事务中的命令要么全部被执行,要么全部
阅读全文
摘要:本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人。
搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维的(经纬度)而我们常用的索引(无论是B树、红黑树还是跳表)都是一维的。GeoHash 算法的本质就是将二维的经纬度转换为一维的表示。
阅读全文
摘要:本文是使用 golang 实现 redis 系列的第七篇, 将介绍如何在分布式缓存中使用 Try-Commit-Catch 方式来解决分布式一致性问题。
阅读全文
摘要:本文是使用 golang 实现 redis 系列的第七篇, 将介绍如何将单点的缓存服务器扩展为分布式缓存。我们采用一致性 hash 算法 key 分散到不同的服务器,客户端可以连接到服务集群中任意一个节点。当节点需要访问的数据不在自己本地时,需要通过一致性 hash 算法计算出数据所在的节点并将指令转发给它。
阅读全文
摘要:本文是使用 golang 实现 redis 系列的第六篇, 将介绍如何实现一个 Pipeline 模式的 Redis 客户端
阅读全文
摘要:跳表和 SortedSet 实现
阅读全文
摘要:AOF 持久化与AOF重写实现
阅读全文
摘要:Golang 实现 Redis 之三: 内存KV数据库实现
阅读全文
摘要:Golang 实现 Redis 之二: Redis 通信协议与解析器的实现
阅读全文
摘要:Golang 开发 Tcp 服务器及拆包粘包、优雅关闭的解决方案
阅读全文