共 2167 字,阅读需 5 分钟

前言

redisRabbitmqkafka

话说,不管是python还是golang,不管是原生或者社区都没有太好用的持久化队列库包,这里说的是直接可引入库像sqlite库那样,而不是消息队列服务端。

https://github.com/rfyiamcool/rocks_queue

队列的设计原理

我先前写过一篇文章来阐述过 现在市面上的持久化队列的设计原理,方案不外乎就几种:

redis
kafka
lsmleveldbrocksdbrocksdbssdbardb360 pikatidb

rocksdb只有kv模型,我们如何通过kv模型来构建双端链表的模型? 可以看下面的设计模式…

表明类型为list队列

    key                               value

+queue_name,l                           1
list数据存储格式

                key                                    value

l[queue_name]\x01\x00\x00\x00\x00\x00\x00\x03   xiaorui.cc index: 945
l[queue_name]\x01\x00\x00\x00\x00\x00\x00\x03   xiaorui.cc index: 946
l[queue_name]\x01\x00\x00\x00\x00\x00\x00\x03   xiaorui.cc index: 947
l[queue_name]\x01\x00\x00\x00\x00\x00\x00\x03   xiaorui.cc index: 948
l[queue_name]\x01\x00\x00\x00\x00\x00\x00\x03   xiaorui.cc index: 949
l[queue_name]\x01\x00\x00\x00\x00\x00\x00\x03   xiaorui.cc index: 950

怎么用

首先安装rocksdb存储引擎

https://github.com/facebook/rocksdb/blob/master/INSTALL.md

测试样例代码

git clone git@github.com:rfyiamcool/rocks_queue.git
cd rocks_queue
go run main.go

性能如何

使用固态硬盘ssd, 不加载tcp模块,直接单纯的库引用的模型下,每秒可以插入19w数据,每秒可以get 18w的数据。 限于机械硬盘的io能力,插入读取也就8w左右…

参考了约炮神器陌陌 { GoRedis半成品代码 }

END…