zoukankan      html  css  js  c++  java
  • Memcache 和 Radis 比较

    Memcache 和 Radis 比较

     分类:
     
     
     

    目录(?)[+]

     

    一、Memcache

    1.     memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
    redis有部份存在硬盘上,这样能保证数据的持久性。

    2.      Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。

    3.      memcache 存在内存中,分配的内存满后,会按一定的规则删除一些k/v数据,重启后自然全部丢失。

    4.      过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定。

    5.      首先要说明的是Memcached支持最大的存储对象为1M。它的内存分配比较特殊,但是这样的分配方式其实也是基于性能考虑的,简单的分配机制可以更容易回收再分配,节省对CPU的使用。大于1M需要拆分。

    6.      memcached能接受的key的最大长度是,255字符。

    7.     同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方,但是get以后,处理期间可能先被其他Set了,后面的Set会覆盖前面的,但是memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的item,memcached会 给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到memcached中,您可以通过cas命令把那个唯一标识一起发送给 memcached。如果该item存放在memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个 item,那么该item存放在memcached中的唯一标识将会改变,您的写操作就会失败。

    8.     无身份验证,认为身份验证是更高层的问题。

    9.     删除Delete操作只是将该chunk置为删除状态,这样在下次使用将优先利用这样的chunk。

    10.             Flush操作相当于将所有的item失效的一个动作。并不会改变memcache内存分配情况。

    11.         memcache已经分配的内存不会再主动清理。

    12.         memcache分配给某个slab的内存页不能再分配给其他slab。

    13.         flush_all不能重置memcache分配内存页的格局,只是给所有的item置为过期。

    14.         memcache最大存储的item(key+value)大小限制为1M,这由page大小1M限制。

    15.         由于memcache的分布式是客户端程序通过hash算法得到的key取模来实现,不同的语言可能会采用不同的hash算法,同样的客户端程序也有可能使用相异的方法,因此在多语言、多模块共用同一组memcached服务时,一定要注意在客户端选择相同的hash算法。

    16.         启动memcached时可以通过-M参数禁止LRU替换,在内存用尽时add和set会返回失败。

    17.         memcached启动时指定的是数据存储量,没有包括本身占用的内存、以及为了保存数据而设置的管理空间。因此它占用的内存量会多于启动时指定的内存分配量,这点需要注意。


    二、Redis

    1.      Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

    2.  Redis支持数据的备份,即master-slave模式的数据备份。

    3.  Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

    4.  Redis,具备一定的数据库特征。

    5.  Redis数据可以存储到硬盘,基本没有过期策略。

    6.  redis有一个致命缺陷 当内存满了时 dump数据cpu占用100%。

    7.   


    三、Memcache和Redis区别

    Redis和Memcache在写入性能上面差别不大,读取性能上面尤其是批量读取性能上面Memcache更强。

    1.Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。

    2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

    3.Redis支持数据的备份,即master-slave模式的数据备份。

    4.如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。

    5.如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。

    6.redis可以做cache,但redis更多是作为内存数据库的角色存在,且一致性哈希的实现还不成熟

    7.redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。

    8.在100k以上的数据中,Memcached性能要高于Redis。

    性能测试参考:

    MemcacheDB, Tokyo Tyrant, Redis performance test

  • 相关阅读:
    科技爱好者周刊(第 175 期):知识广度 vs 知识深度
    科技爱好者周刊(第 173 期):网络收音机的设计
    Telegra.ph | 简洁的文章发布平台
    前端规范
    Vue入门笔记三(Vuex)
    Vue入门笔记二
    Vue入门笔记一
    多点商城小程序案例笔记一
    sublime text 笔记
    windows下安装SASS
  • 原文地址:https://www.cnblogs.com/developer-ios/p/5357625.html
Copyright © 2011-2022 走看看