`
锅巴粥
  • 浏览: 843 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

把Queue/Stack存进Memcached

阅读更多
实现Queue/Stack存进Memcached的方法很简单,就是把多个Item(Memcached基本存储单位,也就是Key/Value对)链表起来,并为此链表取一个名称(name)来代表此Queue/Stack(以下简称集合),以后的各种队列操作也要用到此名称.为Memcached增强对集合的一些功能操作新加的命令如下:

1, queue/stack name expiration length

    创建或修改 name 集合名称 以此为分布式依据. expiration 过期时间 <0时由过期为元素的过期时间 0时删除此集合(更新时) >0时元素的过期为 此值

2, queue/stack name expiration length key flags exp vlen

    创建及添加元素, 创建动作只发生在第一次调用 name expiration length 同上 key 元素的key 存储时会同集合名称组合一起存时Mem,格式为:name_key,所以用此格式为key也可以直接操作该元素,并且集合也适应此元素的变化. flags exp vlen 分别为Mem的常规属性. 只是在集合的expiration大于0时,exp设置无效,始终等于expiration值.

3, pops/pop name flags start len

    范围取元素 是实现pop peek popTail peekTail remove的基础 name 集合名称 flags 获取方式 1获取并删除 0只获取 start 集合开始的位置 从0开始 支持负数, -1为最后位. len 从start开始的长度

4, list name

    全部取

5, size name

    集合当前元素数

6, clear name

    清空所有元素

根据上面几种命令总结操作如下:
1,限定或不限定长度的存或取          适应场景:最新文章,好友动态 ,分页显示
2,支持某个元素的或存或取或删或修改  适应场景:评论,留言等.
3,集合元素同时或不同时失效,
4,Queue适应最旧数据
5,Stack适应最新数据.

C源码:  svn checkout http://qmemcached.googlecode.com/svn/trunk/main
java客户端: svn checkout http://qmemcached.googlecode.com/svn/trunk/java_client

不完全测试性能:
get 20 items escape time:16
get 30 items escape time:47
get 50 items escape time:47
get 100 items escape time:109
get 150 items escape time:110
get 200 items escape time:125
get 300 items escape time:178
get 400 items escape time:218
get 500 items escape time:234
get 600 items escape time:297
get 700 items escape time:328
get 1000 items escape time:641

相较于TT&TC的Btree Queue
TT&TC(Btree) 2023403 itmes getQueue 10 elements escape time:16
TT&TC(Btree) 2023403 itmes getQueue 30 elements escape time:31
TT&TC(Btree) 2023403 itmes getQueue 40 elements escape time:47
TT&TC(Btree) 2023403 itmes getQueue 60 elements escape time:78
TT&TC(Btree) 2023403 itmes getQueue 110 elements escape time:110
TT&TC(Btree) 2023403 itmes getQueue 180 elements escape time:125
TT&TC(Btree) 2023403 itmes getQueue 330 elements escape time:145

总的说集合取操作和TT&TC相差无几.
ps:TT&TC的Queue是通过Lua扩展来实现的.如本身实现的话还会更快些.

分享到:
评论
3 楼 锅巴粥 2010-11-09  
kula 写道
何必这么麻烦..直接用redis不就得了

redis的过期方式是针对整个集合的, 而且设置expire后再更新操作时会清除集合所有keys,而此项目集合元素是独立存在的,独立存在的意思是可以单独过期,删除,获取,更新等操作. 同时集合也会作相应改变的.另外集合还能实现定长集合.超过长度的集合或舍去或不添加不进集合.
2 楼 dennis_zane 2010-10-12  
貌似没什么人关注,楼主这个可以提交给memcached作为patch看看。
1 楼 kula 2010-10-10  
何必这么麻烦..直接用redis不就得了

相关推荐

    rabbitmq代理配置和编码1

    如果`SUBCRIBE`帧的目的地是`/queue/&lt;queueName&gt;`,则表示订阅者希望订阅特定的共享队列`&lt;queueName&gt;`。这意味着多个消费者可以监听同一个队列,实现消息共享。在这种情况下,队列在第一次`SEND`帧发送消息时创建。...

    Stack_Queue_Stack_源码.zip

    在计算机科学中,栈(Stack)和队列(Queue)是两种基本的数据结构,它们在程序设计中扮演着至关重要的角色。本资料“Stack_Queue_Stack_源码.zip”可能包含了一些关于栈和队列的实现源代码,可能是用C++、Java或...

    c++stack_和_queue用法

    ### C++ STL中Stack和Queue的使用详解 #### 一、引言 在C++标准模板库(STL)中,提供了许多高效的容器类,其中包括`stack`和`queue`。这两种容器非常适合处理需要先进后出(FILO, First In Last Out)或先进先出(FIFO,...

    Stack_Queue_Stack_

    栈(Stack)与队列(Queue)是计算机科学中两种基本且重要的数据结构,它们在程序设计中扮演着至关重要的角色。栈是一种后进先出(LIFO, Last In First Out)的数据结构,而队列则是一种先进先出(FIFO, First In ...

    2Queue1Stack.rar_Two Queues

    本项目“2Queue1Stack.rar”探讨了一种创新的实现方式,即使用两个队列(queue)来模拟一个栈(stack)的功能。这种方法在某些场景下可能比直接使用栈更具优势,例如当系统资源限制或者需要优化特定操作时。 栈是一...

    Exercise on Queue

    数据结构与算法第四次上机代码,队列的练习。

    stackqueue.h

    stackqueue.h

    stackqueue

    数据结构实验栈和队列

    stack-to-queue.rar_empty

    Queue() //构造函数 bool empty() //返回队列是否已空 bool full() //返回队列是否已满 int serve() //出队列,成功返回0,否则返回-1 int append(const string &item) //item进队列,成功返回0,否则返回-1 int ...

    c语言实现的模板(list queue stack)

    本项目是基于C语言实现的数据结构模板,包括链表(List)、队列(Queue)和栈(Stack)三种基本数据结构。这些数据结构是算法和程序设计的基础,广泛应用于各种软件开发中。 1. 链表(List) 链表是一种动态数据...

    C++ STL Adaptor stack、queue和vector的使用.doc

    C++ STL Adaptor stack、queue和vector的使用 C++ STL 提供了多种容器类,包括 stack、queue 和vector 等,这些容器类都是基于 Adaptor 模式实现的。下面我们将详细介绍这些容器类的使用方法和常见操作。 Stack ...

    C语言头文件 QUEUE.H

    C语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言...

    leetcode题库-Leetcode_Queue-Stack:Leetcode_Queue-Stack

    在这个“Leetcode题库-Leetcode_Queue-Stack”中,我们聚焦于使用队列(Queue)和栈(Stack)这两种基本数据结构来解决LeetCode上的问题。队列和栈是计算机科学中最基础且重要的数据结构之一,它们各自具有独特的...

    map queue stack

    在IT领域,`map`、`queue`和`stack`是三个非常基础且重要的数据结构。它们在编程中扮演着不可或缺的角色,广泛应用于各种算法和软件设计中。下面将分别介绍这三个概念及其应用。 首先,`map`,也称为映射或关联数组...

    yocto-queue:微小的队列数据结构

    如果在大型数组上执行大量Array#push()和Array#shift() ,则应使用此包而不是数组,因为Array#shift()具有O(n),而Queue#dequeue()具有O(1) 。 对于大型阵列,这有很大的不同。 是元素的有序列表,其中元素插入...

    list、queue、stack:在matlab中实现list、queue、stack数据结构-matlab开发

    它喜欢 java.util.Stack,但是,它可以使用 CStack.content() 来返回堆栈的所有数据(在单元格中),并且速度更快比java的堆栈。 s = CStack(c); c 是一个单元格,可以省略s.size() 返回元素的数量s.empty() 返回栈...

    leetcode卡-abstract-data-type:使用golang实现数据结构

    leetcode卡 abstract-data-type 使用golang实现数据结构 │ main.go │ README.md ├─algorithms ...(https://leetcode-cn.com/explore/learn/card/queue-stack/218/stack-last-in-first-out-data-structu

    C++ stack 和 queue 的笔记

    ### C++ 中 Stack (栈) 与 Queue (队列) 的深入解析 #### 一、Stack (栈) 栈是一种线性数据结构,它遵循“后进先出”(Last In First Out, LIFO)的原则。栈的主要应用在于解决具有递归性质的问题,如表达式求值、...

    STL中string,vector,list,queue,stack....等原码

    1. 资源来源:STL 2. 资源类型: 源码:提供STL的原始代码,允许用户查看和修改STL的内部实现 3. 资源内容:描述资源覆盖的主题和内容,例如容器、迭代器、算法、函数对象、适配器等。 4. 资源适用性: ...

Global site tag (gtag.js) - Google Analytics