本文通过整理系统开发部一次内部交流的资料,总结了一下SPACE产品开发初期形成的一些MemcacheDB的衍生应用。业务需求是千变万化的,我们需要灵活的运用这些基础设施,简单高效的达到我们的目标。
《原有PPT截图丢失》
以下是针对 MemcacheDB-Queue的技术实现的一些文字简介:
memcachedb-queue 设计与实现
0,基于memcachedb的代码,memcachedb为单进程单线程程序,所以全局变量不须任何锁操作。
1,增加两个全局变量:head和tail,类型为unsigned long。
用于表示头节点和尾节点所对应的key值。
2,精简memcache协议,只支持add和get两个命令,add表示入队列,get表示出队列。
此时add和get的key参数和expire参数已经无实际意义,用途仅为协议兼容。
3,增加一个init_queue函数,用于初始化head和tail的值,默认从db中取得,如果没有,则都为0。
4,增加一个save_queue函数,并通过atexit注册,在程序退出时负责将head和tail的值保存到db中。
5,add的实现伪代码:
key=tail;
save_to_db(key,value);
tail++;
6,get的实现伪代码:
key=head;
get_from_db(key,&value);
del_db(key);
head++;
具体实现参见 memcachedb-queue.c
目前经过几天的测试,基本实现目标。
计划用于纸条箱的发纸条队列,还有其他的一些模型类似“生产者/消费者”的程序。
本次交流已经年代久远,其中很多观点和技术以现在的眼光来看,已经显得有些落伍,我目前正在筹划新的一版队列系统的设计与实现,队列是很有用的基础组件之一,值得深入的研究。完成之后,会在博客上与大家分享,敬请期待!