实现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扩展来实现的.如本身实现的话还会更快些.
分享到:
相关推荐
如果`SUBCRIBE`帧的目的地是`/queue/<queueName>`,则表示订阅者希望订阅特定的共享队列`<queueName>`。这意味着多个消费者可以监听同一个队列,实现消息共享。在这种情况下,队列在第一次`SEND`帧发送消息时创建。...
在计算机科学中,栈(Stack)和队列(Queue)是两种基本的数据结构,它们在程序设计中扮演着至关重要的角色。本资料“Stack_Queue_Stack_源码.zip”可能包含了一些关于栈和队列的实现源代码,可能是用C++、Java或...
### C++ STL中Stack和Queue的使用详解 #### 一、引言 在C++标准模板库(STL)中,提供了许多高效的容器类,其中包括`stack`和`queue`。这两种容器非常适合处理需要先进后出(FILO, First In Last Out)或先进先出(FIFO,...
栈(Stack)与队列(Queue)是计算机科学中两种基本且重要的数据结构,它们在程序设计中扮演着至关重要的角色。栈是一种后进先出(LIFO, Last In First Out)的数据结构,而队列则是一种先进先出(FIFO, First In ...
本项目“2Queue1Stack.rar”探讨了一种创新的实现方式,即使用两个队列(queue)来模拟一个栈(stack)的功能。这种方法在某些场景下可能比直接使用栈更具优势,例如当系统资源限制或者需要优化特定操作时。 栈是一...
数据结构与算法第四次上机代码,队列的练习。
stackqueue.h
数据结构实验栈和队列
Queue() //构造函数 bool empty() //返回队列是否已空 bool full() //返回队列是否已满 int serve() //出队列,成功返回0,否则返回-1 int append(const string &item) //item进队列,成功返回0,否则返回-1 int ...
本项目是基于C语言实现的数据结构模板,包括链表(List)、队列(Queue)和栈(Stack)三种基本数据结构。这些数据结构是算法和程序设计的基础,广泛应用于各种软件开发中。 1. 链表(List) 链表是一种动态数据...
C++ STL Adaptor stack、queue和vector的使用 C++ STL 提供了多种容器类,包括 stack、queue 和vector 等,这些容器类都是基于 Adaptor 模式实现的。下面我们将详细介绍这些容器类的使用方法和常见操作。 Stack ...
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”中,我们聚焦于使用队列(Queue)和栈(Stack)这两种基本数据结构来解决LeetCode上的问题。队列和栈是计算机科学中最基础且重要的数据结构之一,它们各自具有独特的...
在IT领域,`map`、`queue`和`stack`是三个非常基础且重要的数据结构。它们在编程中扮演着不可或缺的角色,广泛应用于各种算法和软件设计中。下面将分别介绍这三个概念及其应用。 首先,`map`,也称为映射或关联数组...
如果在大型数组上执行大量Array#push()和Array#shift() ,则应使用此包而不是数组,因为Array#shift()具有O(n),而Queue#dequeue()具有O(1) 。 对于大型阵列,这有很大的不同。 是元素的有序列表,其中元素插入...
它喜欢 java.util.Stack,但是,它可以使用 CStack.content() 来返回堆栈的所有数据(在单元格中),并且速度更快比java的堆栈。 s = CStack(c); c 是一个单元格,可以省略s.size() 返回元素的数量s.empty() 返回栈...
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 (队列) 的深入解析 #### 一、Stack (栈) 栈是一种线性数据结构,它遵循“后进先出”(Last In First Out, LIFO)的原则。栈的主要应用在于解决具有递归性质的问题,如表达式求值、...
1. 资源来源:STL 2. 资源类型: 源码:提供STL的原始代码,允许用户查看和修改STL的内部实现 3. 资源内容:描述资源覆盖的主题和内容,例如容器、迭代器、算法、函数对象、适配器等。 4. 资源适用性: ...