使用memcache 心得和注意事项
内存分配机制:首先要说明的是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 心得和注意事项相关推荐
- 制作unity大世界场景编辑的一点心得和注意事项(场景地编)
制作unity大世界场景的一点心得和注意事项(地编注意事项) 这是一个项目的整个注意事项,所注意点都是根据制作的项目整理的.所以在做任何项目的时候要注意举一反三. 上传场景(细节决定成败,只要细心一点 ...
- 2022 CSP-J1 CSP-S1 第1轮 初赛 攻略 总结 心得体会 注意事项 游记
信息学奥赛初赛(CSP-J/S)最近两年各省分数线和考点分析 信息学奥赛初赛(CSP-J/S)最近两年各省分数线和考点分析 信奥选手注意:CSP-J/S竞赛考察什么内容?如何备赛? 信奥选手注意:CS ...
- [CocosCreator]热更新插件使用心得以及注意事项
最近在搞热更新这块,琢磨了一段时间,终于搞明白怎么使用插件去做热更新了,此文章将记录我使用过程中遇到的坑,和使用心得,希望能对萌新有一定的帮助! (老规矩:广告位留给自己) 欢迎喜欢或 ...
- STM32调试FM24C04B-G心得及注意事项,解决不应答等
一.FM24C04 1.1 铁电 区别于EEPROM如AT24C04,除了操作时序那方面,作用上的区别是在于铁电的读写速度较快,可读写次数多,可保存年限长,价格较之稍高. 1.2 通信方式 IIC 二 ...
- ios中关于delegate(委托)的使用心得
ios中关于delegate(委托)的使用心得 分类: iOS开发2012-05-15 10:54 34793人阅读 评论(9) 收藏 举报 iosuiviewtimerinterfaceprinti ...
- 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
From: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html 导读 1. 什么是序列化? 2. 为什么要序列化?好处在哪里? 3. C++对象序列 ...
- 装修心得体会(家装团购实战版)
经过3个月的前期准备,和2个月的装修实战,家里基本装修差不多了.虽然有较多的前期准备,但装修过程中还是难免有一些遗憾,现记录下来,以备后用,或给大家提个醒. 我原本是要找个装修公司的,因为我对装修一无 ...
- Android 颜色(不)透明度的使用及项目开发中的心得总结
文章目录 背景 1. Android中颜色简介 2. 不透明度 3. 使用方法 3.1 第一种使用方法 3.2 第二种使用方法 3.3. 第三种使用方法 4. 小结 背景 总结一下平时工作开发中,如何 ...
- 使用百度开放云 应用引擎 BAE 部署项目的一些心得
说明:本部署说明针对 Java 应用. 当然,我这里记录的也只是为了方便自己看,要想得心应手地使用 BAE 部署项目,还是要去看 BAE 的官方文档,还是要去看 BAE 的官方文档,还是要去看 BAE ...
最新文章
- 用Python不回头也能看美女,这招你会了吗?
- Ubuntu 12.04中文输入法的安装
- linux分区详解!
- SQL SERVER 数据库邮件配置
- C++设计模式--观察者模式(Observer)
- GitLab - Ubuntu18搭建GitLab仓库服务器(转)
- 1859. 将句子排序
- 聊聊集成电路工程技术人员都有哪些?
- 广东省计算机一级网络题分值,计算机一级考试内容题型以及分值
- 计算机视觉的测试数据集,自动驾驶数据集整理
- 关于svn汉化包安装无效的解决办法
- iTerm2使用zmodem协议上传下载文件
- filezilla linux服务器端,FileZilla Server安装配置教程
- Redis云管理平台CacheCloud
- K9G8G08U0A升级到K9GAG08U0D烧录NK要注意的地方
- 签证官的心思你不懂,所以才会被拒签
- Unity中纹理启用SRGB的坑
- Nginx 502的解决方法
- PDF编辑器哪个好,PDF文件怎么拆分成多个PDF
- 《Neural Collaborative Filtering》NCF模型的理解以及python代码