NoSQL的存储架构——键值存储Memcached和Redis

Memcached

  1. 是一种分布式高性能对象缓存系统,非常简洁,只包含最小的功能集,不支持备份,故障转移或者故障恢复。使用Memcached主要目的通常是减少数据库负载。

  2. Memcached的核心是一个槽(slab)分配器。Memcached按槽存储值。槽本身由页(page)组成,页又由块(chunk)或桶(bucket)组成。槽最小1kb,大小按1.25的幂次增长。Memcached可以存储的值最大不能超过1MB。值通过键来存储和引用。键最大是250字节。对象存储在与其大小最近似的块或者桶中。会产生浪费和碎片。
  3. Memcached利用LRU算法控制对旧缓存对象的驱逐,以槽为单位执行。
  4. Memcached作为一种对象缓存,组织数据元素时并不用集合形式(列表,无需集合,有序集合,映射表)。

Redis

  1. Redis提供了对丰富数据结构的支持,比Memcached要健壮。
  2. Redis中万物都是字符串。包括列表,无需集合,有序集合,映射表都有字符串组成。
  3. Redis定义了一个特别的结构SDS,称为简单动态字符串,由三部分组成:
    • buff:存储字符串的字符数组
    • len:buff长度
    • free:可用字节数量
  4. Redis在主内存中保存数据,并按需将其持久化到磁盘中。与MongoDB不同,它没有使用内存映射文件。而是实现了它自己的虚拟内存子系统。当一个值被换出到磁盘上时,一个指向那个磁盘页的指针会和键一起存储。
  5. 除了虚拟内存管理器,Redis还包括一个时间库,用来协调非阻塞的套接字操作。
  6. Redis不依赖于操作系统的虚拟内存交换,因为其对象不与内存页一一映射。一个Redis对象可以跨页,一页也可以放多个Redis对象。
  7. Redis与MongoDB不同,内存和磁盘中格式不一样,磁盘中要压缩存储,使用自定义交换技术能较少磁盘I/O。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章