Gem 有人使用 redis-store 来做 cache store 吗?

nowazhu · 2011年11月25日 · 最后由 jiemoon 回复于 2015年10月26日 · 8624 次阅读

RT

该 Gem 使用起来如何?如果 ok 的话,我觉得 Ruby China 也许可以放弃 memcached,毕竟 redis 的性能比之要好,且这样可以降低架构的复杂度。

@nowazhu Redis 是长久存放的,很多数据不便于放里面,尤其是用了 redis-objects 将一些重要的数据也放 Redis 里面的时候,放到 Memcached 里面会变得放心些。 把握点就是不重要的 Cache 或 数据就扔 Memcached,重要的放 Redis 现在 Ruby China 也已经从之前的 redis-store 撤回到了 Memcached

redis 一样也可以 expire 呀,可以选择不同的 db 来存放嘛

#2 楼 @nowazhu 我的考虑是这样,Memcached 设置固定大小的内存空间,以便于能够将一些长久没命中的 cache 给挤掉,如果换做 Redis 似乎无法达到

貌似 redis 可以 expire 还可以 LRU

但是作为 cache 本身就应该尽量提高命中率,如果没有命中率那也没有必要 cache。因此你说的这个特性先不说 redis 是否具备,其本身就是站不住脚的。

#4 楼 @hooopo redis 的 LRU 是直接覆盖丢弃数据呢,还是转移到 swap file?

@nowazhu 是被覆盖掉

when new data is added to the server, and the memory limit was already reached, the server will remove some old data deleting a volatile key, that is, a key with an EXPIRE (a timeout) set, even if the key is still far from expiring automatically

http://antirez.com/post/redis-as-LRU-cache.html

#1 楼 @huacnlee 在比较大的项目里,Memcached 如果当掉是不是比较容易引发雪崩?或许可以考虑专门配置一个 redis 用来做 cache

@aNdReW_Qx memcached 当掉是否崩溃这和你的应用设计的好坏有关,如果你严重依赖缓存容器,无论用什么挂掉都会影响你的应用。 理想的做法是缓存一份,db 里一份,缓存定期或按阀值 write back 到 db。这样即使缓存容器挂掉你的应用也是正常的。

比如未读数这个例子:

def unread_num
  unread_num_from_cache || read_attribute(:unread_num)
end

#9 楼 @hooopo 这个备份 redis 自动完成了,应该不用多担心了,另外雪崩应该是缓存突然清掉,导致大量访问直接去 hit db 导致的吧,备份可能不能预防这个问题,最好还是像 redis 那样直接写缓存的本地镜像快速恢复

#7 楼 @hooopo 如果有这个特性,那我那中需求就可以满足啦!

#12 楼 @hooopo 速度应该不够,以前我一个页面用一个缓存数组避免 1 + N 查询,后来去掉这个数组,马上慢了 150+ 毫秒。mongodb 跟内存数据库的速度还是差一个数量级,将工具用到它被设计用于的地方。

redis-store 之前公司用过一段时间,同事说有性能问题,去掉。不知道现在情况如何。

@Rei 这个链接里面的测试结果 mongo-store 速度比其他的快..

#12 楼 @hooopo 这个链接里的测试很奇怪,file store 怎么会比 memory store 更快?

#16 楼 @nowazhu 我也觉得这个测试不靠谱,,因为他的测试数据是随机产生的,每个 store 的 miss 的数量不相同..

#17 楼 @hooopo 搜到的都是 1 年前的,只能挖来问了。。用 redis 做缓存,一年后的现在,方案到底哪种好如何??

3 年过去了,现在大家对 cache 使用 redis-store 还是 memcached 是怎么选择的呢?

哈哈,我也搜到这个了,在挖来同问 😄

需要 登录 后方可回复, 如果你还没有账号请 注册新账号