基于memcached 实现的 queue

今日由于公司的需求,通过memcached 实现了一个基于memcached 的分布式 queue。
简单的数据结构:
构造此queue 非常简单,首先继承java的queue接口。
分布式队列实际商维护头指针,尾巴指针和具体存储空间。
使用一个prefix作为指向memcached存放queue数据额结构的字符串。
在memcached 开辟两个存储空间, tail变量(代表队尾)和head变量(带包队头)。
两个变量通过 prefix+tail 和prefix+head 指向变量在memcached中的存储区域。
实际的存储空间就是 prefix+index。
通过memcached incr 先自增指针位置再添加数据。

实际存在的问题:
实际上当两个运行在不同物理机上的实例会同时访问同一个分布式队列。
所以需要有一个锁的机制完成两个运行在不同物理机上的锁操作。
其实具体通过 memcached 的add操作完成和java 的sleep完成。
当add操作失败时,就sleep随机一段时间。为了防止读取或写入进程异常而导致所不能释放的问题。add操作应该加上超时的限制。再次我设置为1秒,即add('prefix_lock',1,'prefix_lock')

总的来说要在memcached 上实现一个队列不困难。

你可能感兴趣的:(数据结构,memcached)