本文尝试总结Memcache与Redis之间的相同点及不同点,以及关于两者的一些注意问题。

相同


  • 同为内存型数据库
  • 当数据写满后均以LRU机制替换数据
  • 分布式支持

不同


Memcache

  • 多线程
  • 最大key为512B,最大value为1M

Redis

  • 单线程

Redis是单线程所以整体性能不如Memcache,但是平均到每个核上Redis在存储小数据时比Memcached性能更高。由于单线程多I/O串行限制,Redis在存储更大的数据(大于100k)时性能逊于Memcache。

  • 最大key为512M,最大value为512M
  • 持久化
  • 更丰富的数据类型
  1. Hashes
  2. Sorted Sets
  3. Lists
  4. Sets
  • Lua脚本支持

可在Redis中执行Lua脚本,例如用Lua实现原子锁。

 

  • 关于Redis的delete

Redis的delete操作会有毫秒级的延迟,因为Redis的数据回收机制并非实时触发而是定时检查所需回收的数据是否达到某个筏值,达到才会触发数据回收。

  • 关于Redis执行顺序

根据这里( http://www.redis.cn/topics/clients.html )文档翻译:“该顺序是由客户端 socket 文件描述符的数字大小及核心报告客户端事件的顺序决定的,因此顺序可以看成不确定的。”,顺序在大体上会呈“先到先作的原则”,但小处上呈现的应该是无序性。

  • 关于Redis最大连接

如果考虑“ TCP 的 TIMEWAIT ”问题,在 MBP 上测试的结果是 17000 左右的请求数就会出现“ Can’t assign requested address ”的错误。但这个其实是受限于操作系统最大文件描述符,在程序上可使用长链接或单例模式优化。在系统上可通过修改最大文件描述符或减少TCP TIMEWAIT的回收时间。

[暂时想到这些,想到继续补充]