Ruby memcached 和 redis

towonzhou · 2014年11月07日 · 最后由 towonzhou 回复于 2014年11月08日 · 7403 次阅读

这两个都是用来做缓存的,之前用的是 memcached,然后改成 memcached 和 redis 共存了. redis 的作者说:

由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更 高.而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色.

但个人经验来说,这两者都很快,性能问题对于开发者应该不是很需要考虑的重点。个人偏爱 redis,因为他支持更多的数据类型,而且列表操作很简单redis.keys即可。

先来说 memcached, 更多

  1. 安装 memcached 服务brew install memcached
  2. 安装 gem,gem install dalli
  3. 运行示例

再来说 redis 更多

  1. 安装 redis
  2. 安装 gem, gem install redis
  3. 运行示例

    redis 支持的数据类型太多了,就不一一介绍了,参考这里

有人说 redis 会把数据持久化,那样就很慢,其实是有开关让数据不持久化的。但那样重启就丢失了.而且也不慢,因为持久化是 redis 服务在后台运行的。

发现真实运行的时候 redis 有时候链接抛出异常. 最好是这样

value = redis.get(key) rescue value = redis.get(key)

你要不放心,也可以多取几次。

以上图片代码在这里

这两个都是用来做缓存的

Redis 其实是一种数据库。

有人说 redis 会把数据持久化,那样就很慢

首先并不慢,其次 Redis 持久化策略有 RDB 和 AOF 两种,根据需求和实际场景选择合适的策略,甚至 RDB 和 AOF 可以混用,如果不想持久化,也可以 Disable 掉。

发现真实运行的时候 redis 有时候链接抛出异常...你要不放心,也可以多取几次。

你的用法不对,redis 的操作是原子性的,必须先 set,然后 get。当指定的 key 不存在 value 的时候,默认返回 nil

不错啊,楼主分享了很多细致的东西,虽然都用过,不过真心没做总结 楼主加油。

操作 redis 是原子级别的,应当有 set 方法。如果处理 get,是需要 rescue 一下.(同理用于 memcached) 普通的业务需求,用 memcached 就够了。对于比较特殊的业务需求用 redis 有优势. 目前我们公司,日活跃 50W 用户 (移动端), 就只用了 memcached 作为缓存。也够用了。

#3 楼 @hanluner 请问 get 操作要 rescue 什么?能不能举个栗子?

#4 楼 @lgn21st 在项目中实际碰到 redis.get 的时候抛异常,报链接错,rescue 一下就好了,具体原理也没太弄明白。

#1 楼 @lgn21st 肯定是先 set 过再 get 的. 请大神分析下 RDB 和 AOF 这两种策略都用啥场景?

#5 楼 @towonzhou 你能说说你遇到的异常是什么呢?以及产生异常的原因是什么呢?

#8 楼 @lgn21st 没捕捉诶,重现很难....

10 楼 已删除

#10 楼 @Numbcoder

有人说 redis 会把数据持久化,那样就很慢,其实是有开关让数据不持久化的。但那样重启就丢失了.而且也不慢,因为持久化是 redis 服务在后台运行的。

不看清楚真的好吗?

#11 楼 @towonzhou 好吧,是我没看清楚,抱歉! 建议标点后加个空格

#12 楼 @Numbcoder 不用客气啊,^_^和谐..

redis 最新的已支持 cluster 了(不过是 beta 阶段)另外 LZ 建议使用 memcache 时当数据 value 较大时,才使用压缩,通常 value 数据不大不建议使用 compress 选项的

#14 楼 @kewin 受教了。握手。

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