随笔分类 - 用 Golang 实现 Redis

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