我正在尝试实现redis的基本功能,如下所示。
发布于 2015-11-02 09:47:14
如果您想要实现一个提供一些Redis功能的Go服务器,这是相当容易的。您需要确定goroutine模型,然后实现/重用一些数据结构(map和skiplist),然后实现Redis协议(这很简单)。
我建议一个goroutine模型,每个客户端连接有2个goroutine,再加上一个goroutine来实现Redis引擎并管理数据结构。该模型的优点是您可以轻松地支持流水线和Redis命令的原子性属性,而无需任何显式锁定。如果您以后想通过支持阻塞命令(例如那些对队列有用的命令)来扩展范围,这个模型是非常适合的。
现在,如果您也想模仿相同的Redis行为,这就更复杂了。特别是,在后台保存数据,利用OS的即插即用机制将很难使用Go (因为分叉不起作用)。对于内存数据库,前台保存总是很容易的。背景保存是非常困难的。
您还可能希望查看以下尝试,并简化/丰富它们以满足您的目标:
https://stackoverflow.com/questions/33474153
复制相似问题