今天给大家推荐一个我最近正在学习的 Go 开源项目,一个使用 Go 语言实现的简易版 Redis —— Godis。
目前,Godis 这个项目在 Github 上收获了 2.3k star。
麻雀虽小,五脏俱全!目前这个项目已经支持下面这些功能:
- 支持 string, list, hash, set, sorted set, bitmap 数据结构
- 自动过期功能(TTL)
- 发布订阅
- 地理位置
- AOF 持久化及 AOF 重写
- 加载和导出 RDB 文件
- Multi 命令开启的事务具有
原子性
和隔离性
. 若在执行过程中遇到错误, godis 会回滚已执行的命令 - 内置集群模式. 集群对客户端是透明的, 您可以像使用单机版 redis 一样使用 godis 集群
MSET
,MSETNX
,DEL
,Rename
,RenameNX
命令在集群模式下原子性执行, 允许 key 在集群的不同节点上- Multi 命令开启的事务在集群模式下支持在同一个 slot 内执行
- 并行引擎, 无需担心您的操作会阻塞整个服务器.
如果你正在学习 Redis 的话,这个项目有助于你理解 Redis 的底层运行原理。
如果你正在学习 Go 语言的话,这个项目不仅可以让你对 Go 语言有进一步的认识,还能让你知道如何使用 Go 语言开发高并发中间件。
项目地址:https://github.com/HDT3213/godis 。
项目运行
你可以在 Release 页下载 Darwin(MacOS) 和 Linux 版可执行文件,然后使用下面的命令启动:./godis-darwin
./godis-linux
然后,我们可以使用 redis-cli 或者其它 redis 客户端连接 Godis 服务器(默认监听 6399 端口):redis-cli -p 6399
这个项目的源代码还是比较多的。不过,如果你想要学习的话,也没有关系。
源码学习
我建议你看看作者提供了一系列非常详细的指导教程,一共有 10 多篇文章。
从使用 Go 编写 TCP 服务器,到使用 Go 实现内存数据库再到使用 GeoHash 实现搜索附近的人,再到 RDB 文件实现,都有介绍到。
文章地址:https://www.cnblogs.com/Finley/category/1598973.html 。
作者:JackLee,如若转载,请注明出处:https://www.wlwlm.com/article/5747.html