内存分配机制:首先要说明的是Memcached支持最大的存储对象为1M。它的内存分配比较特殊,但是这样的分配方式其实也是对于性能考虑的,简单的分配机制可以更容易回收再分配,节省对于CPU的使用。这里用一个酒窖比喻来说明这种内存分配机制,首先在Memcached起来的时候可以通过参数设置使用的总共的Memory,当你第一次往Memcached存储数据时, Memcached会去申请1MB的内存, 把该块内存称为一个slab, 也称为一个page, 如果可以存储这个数据的最佳的chunk大小为128B,那么Memcached会把刚申请的slab以128B为单位进行分割成8192块. 当这页slab的所有chunk都被用完时,并且继续有数据需要存储在128B的chunk里面时,如果已经申请的内存小于最大可申请内存10MB 时,Memcached继续去申请1M内存,继续以128B为单位进行分割再进行存储;如果已经无法继续申请内存,那么Memcached会先根据LRU 算法把队列里面最久没有被使用到的chunk进行释放后,再将该chunk用于存储. 这个就是建造一个酒窖,然后在有酒进入的时候,首先申请(通常是1M)的空间,用来建酒架,酒架根据这个酒瓶的大小分割酒架为多个小格子安放酒瓶,将同样大小范围内的酒瓶都放置在一类酒架上面。例如20cm半径的酒瓶放置在可以容纳20-25cm的酒架A上,30cm半径的酒瓶就放置在容纳25-30cm的酒架B上。回收机制也很简单,首先新酒入库,看看酒架是否有可以回收的地方,如果有直接使用,如果没有申请新的地方,如果申请不到,采用配置的过期策略。这个特点来看,如果要放的内容大小十分离散,同时大小比例相差梯度很明显,那么可能对于使用空间来说不好,可能在酒架A上就放了一瓶酒,但占用掉了一个酒架的位置。

为了避免使用Memcached时出现异常, 使用Memcached的项目需要注意:
1. 不能往Memcached存储一个大于1MB的数据.
2. 往Memcached存储的所有数据,如果数据的大小分布于各种chunk大小区间,从64B到1MB都有,可能会造成内存的极大浪费以及Memcached的异常.

优化可以从以下几个方面进行:

1. 命中率.

对于缓存服务而言,命中率是至关重要的.命中率的提升可以通过多种方案实现.其一,提高服务获取的内存总量.这无疑是增加命中的最直接的办法,将缓存数据完全放入数据池中.只要连接不失效,就一定命中.其二,提高空间利用率,这实际上也是另一种方式的增加内存总量.具体实现在下一个方面给出.其三,对于一些很特别的memcache应用,可以采用多个memcache服务进行侦听,分开处理,针对服务提供的频繁度划分服务内存,相当于在应用一级别上再来一次LRU.其四,对于整体命中率,可以采取有效的冗余策略,减少分布式服务时某个server发生服务抖动的情况.如,14台机器实现分布式memcache,划分两组服务,其中一组13台做一个分布式的memcache,一组1台做整个的memcache备份.对于update操作,需要进行两边,get操作只需要一遍,一旦访问失效,则访问备份服务器.这样,对于备份服务器需要内存比较大,而且只适应于读操作大于写操作的应用中.这可以认为是RAID3,当然,也可以采用RAID1完全镜像.

2. 空间利用率.

对于使用memcache做定长数据缓存服务而言,是可以在空间利用率上进行优化.甚至最简单的办法可以不用更改memcache的源码遍可以完成由-f和-n参数的配合可以做到定长优化,不过极可能需要浪费掉预分配的199M内存空间.当然前提是memcache的版本是1.2,同时如果使用的是1.2.0和1.2.1的话,需要更改掉一个BUG,那就是getopt时将opt串中最后一个”s”改成”n”,希望memcache能在以后的版本发现这个BUG.例如,如果key是一个定长id(如一个8位的流水号00000001),value是一个定长的串(如16位的任意字符串),对应于一个chunk_size可以这么计算:chunk_size = sizeof(item) + nkey + nsuffix + nbytes = 32 + 8 + (flag长度 + (16 - 2)的长度 + 2) + 16 = 40 + 5 + 16 = 61,那么可以通过-f 1.000001 -n 61来启动memcache.这种情况下,会浪费掉memcache预先分配的200M空间中的199M.从第2个预分配等级到第200个预分配等级将不会用到.然而,存在解决办法,那就是在编译memcache是加入编译参数-DDONT_PREALLOC_SLABS,或者在源代码中加入#define DONT_PREALLOC_SLABS即可,只是会去除memcache的预分配内存机制.

4. 安全性能.

memcache还存在一个比较显著的问题,那就是其安全性能.只要了解memcache监听的端口,对于能够使用分布式memcache进行数据通信的网络环境的机器,都可以通过memcache协议于memcache服务器进行通信,获取或种植数据.不能保证种植进内存里的数据不会被别有心意的人再利用.也不能保证服务器的内存不被漫天遍地的垃圾数据所堆积,造成命中极低.

memcache的设计理念在一个轻字,如果对每次Client的通讯需要校验身份,那么恐怕memcache也就达不到其想要的效果了.存在解决办法缓解这个问题,一般而言,需要使用memcache服务的机器,可以在Server维持一张红色列表.这张表上的机器便可以获取服务.很显然,memcache并非任意Client都能访问,只有信任的机器访问,那么为什么不将这些信任的机器放在一个/etc/mem_passwd下呢.

原文地址:http://blog.csdn.net/stuartjing/article/details/8263895

转载于:https://www.cnblogs.com/yyjie/p/7484989.html

使用memcache 心得和注意事项相关推荐

  1. 制作unity大世界场景编辑的一点心得和注意事项(场景地编)

    制作unity大世界场景的一点心得和注意事项(地编注意事项) 这是一个项目的整个注意事项,所注意点都是根据制作的项目整理的.所以在做任何项目的时候要注意举一反三. 上传场景(细节决定成败,只要细心一点 ...

  2. 2022 CSP-J1 CSP-S1 第1轮 初赛 攻略 总结 心得体会 注意事项 游记

    信息学奥赛初赛(CSP-J/S)最近两年各省分数线和考点分析 信息学奥赛初赛(CSP-J/S)最近两年各省分数线和考点分析 信奥选手注意:CSP-J/S竞赛考察什么内容?如何备赛? 信奥选手注意:CS ...

  3. [CocosCreator]热更新插件使用心得以及注意事项

    最近在搞热更新这块,琢磨了一段时间,终于搞明白怎么使用插件去做热更新了,此文章将记录我使用过程中遇到的坑,和使用心得,希望能对萌新有一定的帮助! (老规矩:广告位留给自己)         欢迎喜欢或 ...

  4. STM32调试FM24C04B-G心得及注意事项,解决不应答等

    一.FM24C04 1.1 铁电 区别于EEPROM如AT24C04,除了操作时序那方面,作用上的区别是在于铁电的读写速度较快,可读写次数多,可保存年限长,价格较之稍高. 1.2 通信方式 IIC 二 ...

  5. ios中关于delegate(委托)的使用心得

    ios中关于delegate(委托)的使用心得 分类: iOS开发2012-05-15 10:54 34793人阅读 评论(9) 收藏 举报 iosuiviewtimerinterfaceprinti ...

  6. 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)

    From: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html 导读 1. 什么是序列化? 2. 为什么要序列化?好处在哪里? 3. C++对象序列 ...

  7. 装修心得体会(家装团购实战版)

    经过3个月的前期准备,和2个月的装修实战,家里基本装修差不多了.虽然有较多的前期准备,但装修过程中还是难免有一些遗憾,现记录下来,以备后用,或给大家提个醒. 我原本是要找个装修公司的,因为我对装修一无 ...

  8. Android 颜色(不)透明度的使用及项目开发中的心得总结

    文章目录 背景 1. Android中颜色简介 2. 不透明度 3. 使用方法 3.1 第一种使用方法 3.2 第二种使用方法 3.3. 第三种使用方法 4. 小结 背景 总结一下平时工作开发中,如何 ...

  9. 使用百度开放云 应用引擎 BAE 部署项目的一些心得

    说明:本部署说明针对 Java 应用. 当然,我这里记录的也只是为了方便自己看,要想得心应手地使用 BAE 部署项目,还是要去看 BAE 的官方文档,还是要去看 BAE 的官方文档,还是要去看 BAE ...

最新文章

  1. 用Python不回头也能看美女,这招你会了吗?
  2. Ubuntu 12.04中文输入法的安装
  3. linux分区详解!
  4. SQL SERVER 数据库邮件配置
  5. C++设计模式--观察者模式(Observer)
  6. GitLab - Ubuntu18搭建GitLab仓库服务器(转)
  7. 1859. 将句子排序
  8. 聊聊集成电路工程技术人员都有哪些?
  9. 广东省计算机一级网络题分值,计算机一级考试内容题型以及分值
  10. 计算机视觉的测试数据集,自动驾驶数据集整理
  11. 关于svn汉化包安装无效的解决办法
  12. iTerm2使用zmodem协议上传下载文件
  13. filezilla linux服务器端,FileZilla Server安装配置教程
  14. Redis云管理平台CacheCloud
  15. K9G8G08U0A升级到K9GAG08U0D烧录NK要注意的地方
  16. 签证官的心思你不懂,所以才会被拒签
  17. Unity中纹理启用SRGB的坑
  18. Nginx 502的解决方法
  19. PDF编辑器哪个好,PDF文件怎么拆分成多个PDF
  20. 《Neural Collaborative Filtering》NCF模型的理解以及python代码

热门文章

  1. HTML5的表格元素
  2. c语言brr17,年末C道出位,OPPO R17新年版美不胜收
  3. 获取热血江湖怪物信息的DELPHI2010源代码
  4. 英雄联盟安装后,游戏界面出现闪屏怎么办??
  5. 10-13 查询各专业学生的平均成绩(MSSQL)
  6. 日常生活系列——电影推荐
  7. 反转链表与拓展【灵神基础精讲】
  8. 机器学习---特征归一化处理
  9. 自定义View、画波浪线
  10. 百家争鸣的Java虚拟机