锁定老帖子 主题:初识kestrel
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-15
最后修改:2009-09-15
Kestrel是一个scala写的twitter开源的消息中间件,特点是高性能、小巧(2K行代码)、持久存储(记录日志到journal)并且可靠(支持可靠获取)。Kestrel的前身是Ruby写的Starling项目,后来twitter的开发人员尝试用scala重新实现。它的代码非常简洁并且优雅,推荐一读。 SHUTDOWN 关闭kestrel server RELOAD 动态重新加载配置文件 DUMP_CONFIG dump配置文件 FLUSH queueName flush某个队列
每个key对应都是一个队列。标准memcached文本协议的支持上也没有完全兼容,SET不支持flag,因此现有大多数基于flag做序列化的memcached client都无法存储任意java类型到kestrel;FLUSH_ALL返回"Flushed all queues.\r\n"而不是"OK\r\n"。 "GET queue1/t=1000\r\n"
"GET queue1/open\r\n" 开始一次可靠获取 "GET queue1/close\r\n" 确认消费成功
"GET queue1/close/open\r\n" memcachedClient.setOptimizeGet(false); Spymemcached似乎不提供这个选项。为了解决序列化问题,我添加了一个新的KestrelCommandFactory,使用这个CommandFactory后,将默认关闭get优化,并且不对GET返回的key做校验从而支持阻塞获取和可靠获取,并且将在存储的数据之前加上4个字节的flag(整型),因此可以支持存储任意可序列化类型。但是有一些应用只需要存储字符串类型和原生类型,这是为了在不同语言的client 之间保持可移植(如存储json数据),那么就不希望在数据之前加上这个flag,关闭这个功能可以通过 memcachedClient.setPrimitiveAsString(true);
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-09
“持久存储(记录日志到journal)”其中journal是什么?
|
|
返回顶楼 | |
发表时间:2009-11-09
ehcache有timeToIdle功能,memcached好像没有,这个功能还是很有用的,比如把session存到cache里面
如果有类似 setExpireTime(String key,int time)这样的方法也可以在每次get的时候重新设置一下过期时间. 楼主的xmemcached有办法实现这个功能否? |
|
返回顶楼 | |
发表时间:2009-11-09
quaff 写道 ehcache有timeToIdle功能,memcached好像没有,这个功能还是很有用的,比如把session存到cache里面
如果有类似 setExpireTime(String key,int time)这样的方法也可以在每次get的时候重新设置一下过期时间. 楼主的xmemcached有办法实现这个功能否? 关于这个问题可以看这个帖子吧,http://www.iteye.com/topic/200611 memcached协议本身不支持这样做,但是可以通过hack源码来搞定。 |
|
返回顶楼 | |
发表时间:2009-11-09
xianglei 写道 “持久存储(记录日志到journal)”其中journal是什么?
Kestrel会将每次操作记录在一个日志文件里,以便恢复的时候重放和校验。 |
|
返回顶楼 | |
发表时间:2010-07-29
这个有点奇葩呀 消息长度越长的 而且开启持久的 花费时间反而少......
记得 ActiveMQ是否存储 影响是蛮大滴 基本是保守估计也相差一到俩倍 不知道他这个Append是怎么弄的? activemQ里是存到多个log文件 每个默认32M |
|
返回顶楼 | |
浏览 8572 次