redis vs memcached

redis和memcached都属于nosql数据库,数据都在内存,都是key-value的数据库,当然,redis能存储复杂的struct类型的value,各种开发语言的客户端都支持的很好。redis和memcached都是极好的缓存工具,什么时候该用redis,什么时候该用memcached呢?
意译redis vs memcached

Memcached的优势

  • Memcached采用LRU策略淘汰旧数据,适合存放小体积的数据或者静态数据,同样的基本数据在Memcached里面的内存消耗要少,对于动态数据、序列化大体积数据没有什么优势,容易产生内存碎片。

  • Memcached支持多线程,可以应对性能的压力,一致性hash可以减少数据丢失。redis可以通过集群来抗压,但是部署维护相对复杂。

Redis的优势

  • Redis是单线程的,适合存储各种复杂数据类型,提供了string、list、set、hash、sortedset等数据类型,不会丢数据,可以通过aof或者快照来持久化,甚至可以替代mongo。

  • Redis的淘汰策略优于Memcached,提供了6中淘汰算法,而且淘汰机制有三层。

    • 当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key
    • 惰性删除策略无法保证冷数据被及时删掉,Redis会根据配置文件的hz参数,调用databasesCron()函数触发清理策略,定期主动淘汰一批已过期的key,每次淘汰任务执行的最大时长timelimit根据hz参数计算而来,和hz是倒数关系,主动淘汰频率越高,则每次淘汰最长占用时间就越短,避免每次主动淘汰阻塞应用请求
    • 当前已用内存超过maxmemory限定时,根据用户配置的maxmemory-policy参数(一般为LRU/TTL),选取算法对redis里面的maxmemory-samples个key进行抽样清理(maxmemory-samples的增加,会提高LRU或TTL的精准度,同时会导致清理时消耗更多的CPU时间;最好不要触发这个清理)
  • Redis的key长度是512MB,Memcached限制key长度在250 bytes以内。

  • Redis可以搭载lua脚本。