Memcached源码分析之一
2015-06-09 15:49
627 查看
Memcached介绍
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
Memcached特点
协议简单
基于libevent的事件处理
内置内存存储方式
memcached不互相通信的分布式
Memcached命令
基本命令
memcached主要分为三种类型的命令:
类型 | 概念 | 具体命令 | 格式 |
---|---|---|---|
storage commands | 通过key在server端以键值对的 形式存储数据,完整的操作包含 两行输入:命令行和数据行 | set,add, replace append, prepend, cas | <command name> <key> <flags> <exptime> <bytes> [noreply]\r\n cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n |
Retrieval Commands | 用户端通过一个或多个key从 server端获取key值对应的键值对, 完整操作为输入key,返回数据 | get, gets | <command name> |
Other commands | 其他不涉及到数据的输入输出 的命令 | delete, incr/decr, touch, slabs reassign, slabs automove, stats, flush_all, version, quit |
add命令必须在memcached中不存在相应key才能作用
replace命令要求memcached中必须存在相应key才能作用
set命令不管key存在与否,强制进行set操作
cas(check and set)命令的使用涉及到一个版本号的概念,这里为cas unique id,即键值对存储到memcached中时,会有一个特定的cas unique id, 使用cas命令时,要求跟随一个cas id作为参数输入,当输入的cas id与key对应的数据目前的cas id一致,才进行键值对的set操作
gets命令为根据多个key一次获取多个键值对,用来提高获取数据的效率,但是当这些key映射在不同的server上时,客户端需要同多个server进行通信,gets的意义不大,所以使用gets操作时,用户应该尽量保证多个key映射在同一个server上
touch命令涉及到一个过期时间(exptime)的概念,即在将数据存储到memcached中时,会设置一个过期时间,当前时间超过过期时间时,数据将自动失效,touch命令即用来更新数据的过期时间。
flush_all用来清除memcached中所有时间,主要采取将所有数据设置为过期的方式实现
slabs ressign, slabs automove主要用来在subclass之间转移slab, 后续会做介绍。
Memcached采用一致性hash算法
算法介绍很多,这里给出一个网友的例子吧:http://blog.csdn.net/cywosp/article/details/23397179/Memcached文件结构
代码文件:
hash.h\hash.c | hash算法 |
assoc.h\assoc.c | Hash表的管理 |
items.h\items.c | 服务器端item对象管理 |
slabs.h\slabs.c | 服务器端内存对象管理 |
memcached.h\memcached.c | 主函数及控制逻辑 |
thread.c | 线程机制 |
stats.h\stats.c | 数据统计 |
util.h\util.c | 工具程序 |
Protocol.txt | 帮助文档,参数概念 |
相关文章推荐
- memcache
- Memcache缓存数据库
- NOSQL----memcached(临时键值存储数据库)在centos下的安装与启动
- Memcached与Redis
- [缓存]Linux系统memcached的安装
- 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类
- memcache使用Java版
- Redis与Memcached的区别
- 【学习点滴-memcached】mecached内存管理与原理
- Memcached 内存管理(一)
- Tomcat集群--基于Memcached的Session共享
- Memcache存储大量数据的问题
- memcache 在php存取中的应用
- spring3初步整合memcached
- centos6 yum 安装memcached
- memcached—如何在Windows操作系统中安装、启动和卸载memcached
- Memcached(四)、Memcached原理
- memcached 分布式集群算法
- cookie+memcached实现单点登陆
- Memcache基础(一)