`

Memcache存储一些要点

阅读更多

介绍

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

Memcache的存储涉及到slab,page,chunk三个概念

1.Chunk为固定大小的内存空间,默认为96Byte。

2.page对应实际的物理空间,1个page为1M。

3.同样大小的chunk又称为slab。

Memcached再启动的时候根据-n和-f参数,产生若干slab。具体应用中Memcache每次申请1page,并将这1M空间分割成若干个chunk,这些chunk有着同样的大小,属于同一个slab。

 

【添加】,通过memcache添加item的时候:

1.  Memcache计算item的大小(key+value+flags),选取合适的slab(刚好能放下该item的slab)

2.  如果这个item对应的slab未出现过,则申请1个page(注意,这1M空间不论是否达到memcached使用内存都可以申请成功)并加该item存入slab中的chunk

3.  如果item对应的slab出现过,则在该slab中优先选择expired(free_chunks)和delete(在1.2.2中delete的 chunk存在着不能被重复利用的问题)的chunk进行存储,其次将选择未使用过的chunk(free_chunks_end)进行存储。

4.  如果item对应的slab出现过,但是对应的slab已经存储满了,那么会申请一个新的page,这个page被分为对应大小的chunk,继续存储。

5.  如果item对应的slab出现过,但是对应的slab已经存储满了并且memcache也达到了最大内存使用。将使用lru算法,清除item(可能将未过期的item清除)此时会有eviction++

 

【删除】:

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

 

【flush】

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

 

一些注意

1. memcache已经分配的内存不会再主动清理。
2. memcache分配给某个slab的内存页不能再分配给其他slab。
3. flush_all不能重置memcache分配内存页的格局,只是给所有的item置为过期。
4. memcache最大存储的item(key+value)大小限制为1M,这由page大小1M限制

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

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

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

8.memcache存储的时候对key的长度有限制,php和C的最大长度都是250

分享到:
评论

相关推荐

    memcache.zip

    **Memcache技术详解** Memcache是一种高性能的分布式内存对象缓存系统,用于在动态系统中减少...以上就是关于Memcache的安装、使用和优化的基本知识,掌握这些要点,可以有效利用Memcache提升Web应用程序的性能。

    php 5.3.5安装memcache注意事项小结

    此外,提到了一些相关文章,如使用Memcache存储session、PHP中Memcache的应用、Memcache的学习笔记以及如何在Windows环境下配置Memcache等,这些都是进一步了解和学习PHP与Memcache结合使用的宝贵资源。通过这些资料...

    阿里云 专有云企业版 V3.8.0 云数据库 Memcache 版 安全白皮书 20190621.pdf

    以下是该服务的一些关键安全设计要点: 1. **安全隔离**: - 实现物理和逻辑层面的隔离,确保不同用户之间的数据互不干扰。 - 采用VPC(Virtual Private Cloud)技术,构建独立的网络环境,防止跨账户通信。 - ...

    lnmp胜与LAMP十倍的web服务器架构

    然而,随着用户访问量的激增以及对性能更高要求的应用场景增多,LAMP架构逐渐暴露出了一些不足之处,例如高并发下的性能瓶颈问题等。因此,一种新的服务器架构——LNMP(Linux + Nginx + MySQL + PHP)应运而生,并...

    Linux下Redis的安装和部署

    在部署Redis时,需要注意以下几个要点: - **配置文件的修改**:根据实际需求调整`redis.conf`,例如设置监听端口、最大内存限制、数据持久化策略等。 - **安全性考虑**:默认情况下,Redis不开启密码认证,建议在...

    shopnc开发手册

    - **resource**:资源文件夹,存储字体、CSS样式表、JavaScript脚本等前端资源。 - **templates**:视图文件夹,存放HTML模板文件。 - **Chat、Circle等文件夹**:具有类似结构,分别用于聊天功能、圈子等功能...

    魔方系统架构设计说明书v1.0.doc

    - **缓存服务器(Memcache Server):** 主要用于提高系统响应速度和减轻数据库压力。 - **HBase服务器:** 负责存储大量结构化和非结构化数据,对于系统的大数据存储至关重要。 - **数据库服务器(Database Server):*...

    ThinkPHP的SAE开发相关注意事项详解

    SQL队列在SAE上固定使用KVDB存储,而DB相关的配置如`DB_SQL_BUILD_CACHE`和`DB_SQL_BUILD_LENGTH`在SAE上可能不再适用。 4. **文件上传**: 使用UploadFile类库进行文件上传,本地环境下上传到指定目录,SAE上则...

    天翼云认证开发工程师重点知识手册V2

    本手册旨在帮助读者系统地学习云开发的核心概念和技术要点,并通过实践加深对天翼云服务的理解。 #### 云开发基础:从传统到现代 1. **从传统应用开发模式到敏捷开发** - **上篇**:这部分内容首先介绍了传统的...

    腾讯PHP开发工程师笔试试卷

    ...`array_merge()`会将两个数组的元素合并,如果有相同键,则后面的数组值会覆盖前面的;`+`运算符则保留两个数组的键,如果键重复,值来自第二个数组;...以上只是部分要点,具体题目可能需要更详细的解答。

    高性能高并发服务器架构大全

     "我在SOHU这几年做的一些门户级别的程序系统(C/C++开发)" 115  中国顶级门户网站架构分析1 116  中国顶级门户网站架构分析 2 118  服务器的大用户量的承载方案 120  YouTube Scalability Talk 121 ...

Global site tag (gtag.js) - Google Analytics