mcq 轻量级的消息队列

太堵了?那就绕行.
持久化消息队列memcacheq(简称mcq)是一个轻量级的消息队列。mcq依赖于Berkeley DB和libevent。Berkeley DB用于持久化存储队列的数据,避免在mcq崩溃或这服务器当掉时候,不至于数据丢失。

特性:
1.damn simple (简单易用)
2.very fast    (处理速度快)
3.multiple queue (多条队列)
4.concurrent well (并发性能好)
5.memcache protocol compatible (与memcache的协议兼容)

使用场景:高并发、数据可以弱一致性.(有待添加,欢迎提出各自应用的场景).


mcq的方法:set、get、delete
1.set 增加一个信息到队列的尾部:
set <queue name> <flags> 0 <message_len>\r\n(回车)
<put your message body here>\r\n(回车)
STORED\r\n 
例:
  set test_queue 0 0 2
  te
  STORED
  set test_queue 0 0 3
  tes
  STORED
  注:信息不能大于message_len。大于message_len会报错.message_len以字节为单位。
  set test_queue 0 0 2
  tes
  CLIENT_ERROR bad data chunk
  ERROR
  注:你超出message_len范围后会报错,错误的数据集。

查看队列:stats queue
stats queue
STAT test_queue 2/0 (队列test_queue里面有2条信息,读取了0条)
END

2. get 从队列的头部查询一条信息并销毁:
get <queue name>\r\n
VALUE <queue name> <flags> <message_len>\r\n
<your message body will come here>\r\n
END\r\n
例:
   get test_queue
   VALUE test_queue 0 2
   te
   END
可以看出是查询的第一个插入的信息。
查看队列:stats queue
stats queue
STAT test_queue 2/1 (队列test_queue里面有2条信息,读取了1条)
END

3.delete 删除队列
delete <queue name>
例:
    delete test_queue
    DELETED
查看队列:
stats queue
END
已经删除了。

这么简单?对,就是这么简单。mcq的特性之一 damn simple.

安装memcached及memcacheq: http://www.cnblogs.com/sunzy/archive/2012/04/13/2446234.html
由于没有具体的参考引用内容,以下是基于一般知识对ufshci4.1 MCQ中SQ/CQ队列指针维护方法的介绍。 在ufshci4.1的多命令队列(MCQ)架构中,提交队列(SQ)和完成队列(CQ)的指针维护是确保命令正确处理和状态反馈的关键。 #### SQ队列指针维护 - **头指针(Head Pointer)**:头指针指向SQ队列中最早提交但尚未处理的命令。当主机向SQ队列提交新命令时,头指针位置不变;当设备开始处理队列中的命令时,头指针会随着已处理命令的完成而向前移动,指向下一个待处理的命令。例如,当一个命令被设备取走处理后,头指针就会递增,指向下一个命令的位置。 ```python # 伪代码示例,模拟头指针移动 if command_processed: sq_head_pointer = (sq_head_pointer + 1) % SQ_SIZE ``` - **尾指针(Tail Pointer)**:尾指针指向SQ队列中下一个可以插入新命令的位置。当主机提交新命令时,尾指针会向前移动,指示新命令插入的位置。如果尾指针到达队列末尾,会回绕到队列开头,实现循环队列的功能。 ```python # 伪代码示例,模拟尾指针移动 if new_command_submitted: sq_tail_pointer = (sq_tail_pointer + 1) % SQ_SIZE ``` #### CQ队列指针维护 - **头指针(Head Pointer)**:CQ队列的头指针指向最早完成但尚未被主机读取的命令状态。当设备完成一个命令处理并将结果放入CQ队列时,头指针位置不变;当主机读取CQ队列中的完成状态信息后,头指针会向前移动,指向下一个待读取的完成状态。 ```python # 伪代码示例,模拟CQ头指针移动 if completion_status_read: cq_head_pointer = (cq_head_pointer + 1) % CQ_SIZE ``` - **尾指针(Tail Pointer)**:尾指针指向CQ队列中下一个可以存放命令完成状态的位置。当设备完成一个命令处理后,将该命令的完成状态信息放入尾指针所指的位置,然后尾指针向前移动。同样,如果尾指针到达队列末尾,会回绕到队列开头。 ```python # 伪代码示例,模拟CQ尾指针移动 if command_completed: cq_tail_pointer = (cq_tail_pointer + 1) % CQ_SIZE ``` 通过这种指针维护机制,ufshci4.1 MCQ的SQ和CQ队列可以高效地管理命令的提交、处理和完成状态的反馈,确保系统的稳定运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值