memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著[1]  。这是一套开放源代码软件,以BSD license授权发布。

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。
Memcached是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。
在 Memcached中可以保存的item数据量是没有限制的,只要内存足够 。
  Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制,这是由于32位系统限制单进程最多可使用2G内存,要使用更多内存,可以分多个端口开启多个Memcached进程 ,
  最大30天的数据过期时间,设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA 
  60*60*24*30控制 
  最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250控制 
  单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制, 
  它是默认的slab大小 
  最大同时连接数是200,通过 conn_init()中的freetotal进行控制,最大软连接数是1024,通过 
  settings.maxconns=1024 进行控制 
  跟空间占用相关的参数:settings.factor=1.25, settings.chunk_size=48, 影响slab的数据占用和步进方式
memcached是一种无阻塞的socket通信方式服务,基于libevent库,由于无阻塞通信,对内存读写速度非常之快。
  memcached分服务器端和客户端,可以配置多个服务器端和客户端,应用于分布式的服务非常广泛。
  memcached作为小规模的数据分布式平台是十分有效果的。
memcached是键值一一对应,key默认最大不能超过128个字 节,value默认大小是1M,也就是一个slabs,如果要存2M的值(连续的),不能用两个slabs,因为两个slabs不是连续的,无法在内存中 存储,故需要修改slabs的大小,多个key和value进行存储时,即使这个slabs没有利用完,那么也不会存放别的数据。
memcached已经可以支持C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken Scheme、Lua、MySQL和Protocol等语言客户端。
Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具体可以参考PHP手册
MemCache“LXXV. Memcache Functions” 这章。
Memcache面向对象的常用接口包括:
Memcache::connect -- 打开一个到Memcache的连接
Memcache::pconnect -- 打开一个到Memcache的长连接
Memcache::close -- 关闭一个Memcache的连接
Memcache::set -- 保存数据到Memcache服务器上
Memcache::get --提取一个保存在Memcache服务器上的数据
Memcache::replace --替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::delete -- 从Memcache服务器上删除一个保存的项目
Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats -- 获取当前Memcache服务器运行的状态
如果你不喜欢 php_memcache.dll 扩展或者服务器目前不支持这个扩展,那么就可以考虑自己构建.
Memcahe的客户端,要先了解Memcache协议的交互,这样才能开发自己的客户端,这里简单的分析一下Memcache的协议。(更详细的协议内容请在Memcache服务器端的源码的 doc/protocol.txt文件中)
Memcache既支持TCP协议,也支持UDP协议,不过我们这里是以TCP协议的协议作为主要考虑对象,想了解UDP协议的过程,请参考 doc/protocol.txt文件。
[ 错误指令]
Memcache的协议的错误部分主要是三个错误提示指令:
普通错误信息,比如指令错误之类的
ERROR
客户端错误
CLIENT_ERROR <错误信息>
服务器端错误
SERVER_ERROR <错误信息>
[ 数据保存指令]
数据保存是基本的功能,就是客户端通过命令把数据返回过来,服务器端接收后进行处理。
指令格式:
<命令> <键> <标记> <有效期> <数据长度>
<命令> - command name
主要是三个储存数据的三个命令, set, add, replace
set 命令是保存一个叫做key的数据到服务器上
add 命令是添加一个数据到服务器,但是服务器必须保证这个key是不存在的,能够保证数据不会被覆盖
replace 命令是替换一个已经存在的数据,如果数据不存在,就是类似set功能
<键> - key
就是保存在服务器上唯一的一个表示符,必须是跟其他的key不冲突,否则会覆盖掉原来的数据,这个key是为了能够准确的存取一个数据项目
<标记> - flag
标记是一个16位的无符号整形数据,用来设置服务器端跟客户端一些交互的操作
<有效期> - expiration time
是数据在服务器上的有效期限,如果是0,则数据永远有效,单位是秒,Memcache服务器端会把一个数据的有效期设置为当前Unix时间+设置的有效时间
<数据长度> - bytes
数据的长度,block data 块数据的长度,一般在这个个长度结束以后下一行跟着block data数据内容,发送完数据以后,客户端一般等待服务器端的返回。
数据保存成功
STORED
数据保存失败,一般是因为服务器端这个数据key已经存在了
NOT_STORED
[ 数据提取命令]
从服务器端提取数据主要是使用get指令,格式是:
get <键>*
<键>* -key
key是一个不为空的字符串组合,发送这个指令以后,等待服务器的返回。如果服务器端没有任何数据,则是返回:
END
证明没有不存在这个key,没有任何数据,如果存在数据,则返回指定格式:
VALUE <键> <标记> <数据长度>
<数据块>
返回的数据是以VALUE开始的,后面跟着key和flags,以及数据长度,第二行跟着数据块。
<键> -key
是发送过来指令的key内容
<标记> - flags
是调用set指令保存数据时候的flags标记
<数据长度> - bytes
是保存数据时候定位的长度
<数据块> - data block
数据长度下一行就是提取的数据块内容
[ 数据删除指令]
数据删除指令也是比较简单的,使用delete指令,格式是:
delete <键> <超时时间>
<键> - key
key是你希望在服务器上删除数据的key键
<超时时间> - timeout
按照秒为单位,这个是个可选项,如果你没有指定这个值,那么服务器上key数据将马上被删除,如果设置了这个值,那么数据将在超时时间后把数据清除,该项缺省值是0,表示永不过期。
删除数据后,服务器端会返回:
DELETED
删除数据成功
NOT_FOUND
这个key没有在服务器上找到
如果要删除所有服务器上的数据,可以使用flush_all指令,格式:
flush_all
这个指令执行后,服务器上所有缓存的数据都被删除,并且返回:
OK
这个指令一般不要轻易使,除非你确实想把所有数据都干掉,删除完以后可以无法恢复的。
[其他指令]
如果想了解当前Memcache服务器的状态和版本等信息,可以使用状态查询指令和版本查询指令。
如果想了解当前所有Memcache服务器运行的状态信息,可以使用stats指令,格式
stats
服务器将返回每行按照 STAT开始的状态信息,包括20行,20项左右的信息,包括守护进程的pid、版本、保存的项目数量、内存占用、最大内存限制等等信息。
如果只是想获取部分项目的信息,可以指定参数,格式:
stats <参数>
这个指令将只返回指定参数的项目状态信息。
如果只是想单独了解当前版本信息,可以使用version指令,格式:
version
将返回以 VERSION 开头的版本信息
如果想结束当前连接,使用quit指令,格式:
quit
将断开当前连接

我只是一条小鱼,跟随大鱼们,!!!大神在哪啊!!

memcache 基础原理相关推荐

  1. Memcache的原理的详解

    转载地址:http://sameveryday.blog.163.com/blog/static/178072337201411095357740/ Memcache工作原理 首 先 memcache ...

  2. Memcache工作原理总结

    <!--[if !supportLists]-->1.  <!--[endif]-->分片原理 咱们废话话不多说了,直接看Memcache的原理.首先memcache解决的最大 ...

  3. memcache的原理和命中率的总结

    1       Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的 ...

  4. java 编程原理_Java网络编程 -- 网络编程基础原理

    Hello,今天记录下 Java网络编程 --> 网络编程基础原理. 一起学习,一起进步.继续沉淀,慢慢强大.希望这文章对您有帮助.若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,我是杨展 ...

  5. 【转】GPS从入门到放弃(一) --- GPS基础原理

    转自:https://blog.csdn.net/tyst08/article/details/100529424 GPS从入门到放弃(一) - GPS基础原理 GPS,全称Global Positi ...

  6. Macaca基础原理解析

    导语 前面几篇文章介绍了在Macaca实践中的一些实用技巧与解决方案,今天简单分析一下Macaca的基础原理.这篇文章将以前面所分享的UI自动化Macaca-Java版实践心得中的demo为基础,进行 ...

  7. 云小课|MRS基础原理之ClickHouse组件介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:在2016年开源的 ...

  8. Sniff网络基础原理和软件实现技巧详解

    Sniff网络基础原理和软件实现技巧详解 前言 SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIF ...

  9. SQL注入基础原理与案例(详细总结)

    SQL注入基础原理与案例 一.前言 二.漏洞概述及危害 1.漏洞概述 2.漏洞危害 3.漏洞防范 三.SQL注入 1.SQL注入方式 (1)信息收集 (2)数据注入 (3)高权限注入 2.判断是否存在 ...

最新文章

  1. C++/CLI思辨录之内部指针的两面性
  2. WebClient DownloadFile 用法
  3. 写给自己的好用的VSCode
  4. python缺少dll文件_python37.dll文件下载,金山毒霸dll修复工具帮您解决文件丢失导致“python37.dll找不到”的系统问题...
  5. 第一个Hibernate项目
  6. matplotlib 中文显示 的问题
  7. php运行出现Call to undefined function curl_init()解决方法
  8. 小米笔试题:无序数组中最小的k个数
  9. 领酌酒业:一文阅尽酱香酒
  10. 大爱sublime text3
  11. DIY RazorEngine 的程序集生成方式
  12. [转载] python中的内置异常结构
  13. JavaSE学习--内部类
  14. .net mysql 测试连接数据库连接,C#.NET连接mysql方法
  15. (CVPR_2021) Center-based 3D Object Detection and Tracking
  16. centeros安装mySQL
  17. python数据分析电影论文_以腾讯5000部电影为例,告诉你Python数据分析该怎么做...
  18. 武侠末世(真香游戏V2.0)
  19. OceanBase | OBCA认证考试
  20. 无线蓝牙耳机哪个牌子的好?无线耳机排行榜前十名!

热门文章

  1. linux系统中ntp服务监听端口是,Linux系统下测试UDP端口是否正常监听的办法
  2. 采用三层架构(JAVA)设计学生管理系统
  3. 小白视觉第一步保存图片
  4. Vue.js 单元测试
  5. java.lang.Instrument 代理Agent使用
  6. IDEA 代码生成插件 CodeMaker
  7. 浅谈Java中的Set、List、Map的区别
  8. chrome 插件 vimium 介绍
  9. 谁在关心toString的性能?
  10. Java Applet 基础