rfcv 发表于 2015-11-18 15:38:21

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

  Memcached

[*]是一种分布式高性能对象缓存系统,非常简洁,只包含最小的功能集,不支持备份,故障转移或者故障恢复。使用Memcached主要目的通常是减少数据库负载。
[*]
[*]Memcached的核心是一个槽(slab)分配器。Memcached按槽存储值。槽本身由页(page)组成,页又由块(chunk)或桶(bucket)组成。槽最小1kb,大小按1.25的幂次增长。Memcached可以存储的值最大不能超过1MB。值通过键来存储和引用。键最大是250字节。对象存储在与其大小最近似的块或者桶中。会产生浪费和碎片。
[*]Memcached利用LRU算法控制对旧缓存对象的驱逐,以槽为单位执行。
[*]Memcached作为一种对象缓存,组织数据元素时并不用集合形式(列表,无需集合,有序集合,映射表)。
  Redis

[*]Redis提供了对丰富数据结构的支持,比Memcached要健壮。
[*]Redis中万物都是字符串。包括列表,无需集合,有序集合,映射表都有字符串组成。
[*]Redis定义了一个特别的结构SDS,称为简单动态字符串,由三部分组成:

[*]buff:存储字符串的字符数组
[*]len:buff长度
[*]free:可用字节数量

[*]Redis在主内存中保存数据,并按需将其持久化到磁盘中。与MongoDB不同,它没有使用内存映射文件。而是实现了它自己的虚拟内存子系统。当一个值被换出到磁盘上时,一个指向那个磁盘页的指针会和键一起存储。
[*]除了虚拟内存管理器,Redis还包括一个时间库,用来协调非阻塞的套接字操作。
[*]Redis不依赖于操作系统的虚拟内存交换,因为其对象不与内存页一一映射。一个Redis对象可以跨页,一页也可以放多个Redis对象。
[*]Redis与MongoDB不同,内存和磁盘中格式不一样,磁盘中要压缩存储,使用自定义交换技术能较少磁盘I/O。

         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: NoSQL的存储架构——键值存储Memcached和Redis