关于Redis和memcache缓存技术

一、缓存使用场景

1.当某些数据会被频繁使用,而该数据很少更新时。
  • 例如系统中需要频繁使用到某省份的地区名称,而这些信息基本固定,一旦录入就很少变动;对于这种数据量大且基本不变动的情况,将他们加入缓存,使用前判断,不为空则从村缓存取值;为空则请求数据库,并将数据加入缓存,如此可大大提高系统访问效率。

二、Redis和Memcache的优缺点

1.1、Redis的优点
  1. 支持多种数据结构,不仅支持简单的k/v类型的数据,同时还支持如 string(字符串)、 list(双向链表)、dict(hash 表)、set(集合)、 zset(排序 set)、hyperloglog(基数估算)等数据结构的存储,应用场景广阔。
  2. 支持数据持久化操作,能够进行 aof 及 rdb 数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。简单来说就是在运行时可将数据备份在磁盘中,即使断电或重启后,缓存数据依然能再次加载到内存中,只要Redis配置的合理,基本上不会丢失数据。
  3. 支持通过 Replication 进行数据复制,通过 master-slave 机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave 机制是 Redis 进行 HA 的重要手段。
  4. 单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
1.2、Redis的缺点
  1. 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

总结: Redis受限于特定的场景,专注于特定的领域之下,速度相当之快,目前还未找到能替代使用产品。在使用缓存的时候,redis比memcached具有更多的优势,并且支持更多的数据类型。性能方面,Redis在读操作和写操作上是略领先Memcached的。

2.1、Memcache的优点
  1. Memcachedmemecache只支持key-value,唯一支持的数据类型是字符串string。非常适合缓存只读数据,因为字符串不需要额外的处理。memcache可以使用一致性hash做分布式。
  2. Memcached可以使用多核,在100k以上的数据中,Memcached性能要高于Redis,这方面Redis稍有逊色。
2.2、Memcache的缺点
  1. memcache不持久话数据,一旦出现断电情况便丢失数据。Memcache在并发场景下,能用cas保证一致性,而Redis事务支持比较弱,只能保证事务中的每个操作连续执行。
  2. memcache是一个内存缓存,key的长度小于250字符**,单个item存储要小于1M**,不适合虚拟机使用

总结:memcache对并非的支持不亚于Redis。性能方面, Memcached的内存管理不像Redis那么复杂,元数据metadata更小,相对来说额外开销就很少。