memcached 的学习

1.memcached 是什么东西?

memcached z是一个自由,源码开放,高性能,分布式内存对象缓存系统,目的在于减轻数据库负载来使动态web应用程序提速

通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态,数据库驱动网站的速度

memcached 基于一个存储键/值对的hashmap

关于hashmap我会在以后的博文中专门写

2.memcached 的安装

我用的是ubuntu,安装memcached 需要libevent 库的支持,关于libevent 我会在后续的学习中写

sudo apt-get install libevent

sudo apt-get install memcached

3.memcached 的使用

memcached 有四种类型的命令

memcached 的学习(1)存储命令(set/add/replace/append/prepend)

首先得启动memcached

启动命令和效果:

memcached 的学习

第二步:用telnet 连接

memcached 的学习

记得移动要在客户端输入set/add等命令(我刚开始学的时候,在服务器端输入数据,咋都不出结果,尴尬,自己有点傻)

输入上面的set命令之后,就会自动出现STORED 说明你输入的数据已经存储(客户端的显示)

memcached 端就会显示你存储的信息

memcached 的学习


接下来重点解释一下这些命令都是什么意思?

memcached 主要有四种类型的命令

(1)存储命令(set/add/replace/prepend)指示服务器存储一些由键值标识的数据,客户端发送一条命令,后面跟着数据区块,然后,客户端等待接收服务器回传的命令行,指示成功与否

(2)读取命令(get/bget/gets)指示服务器返回与键值相符合的数据,客户端发送一行命令,包括所请求的键值,服务器每找到一项内容,都会发送会客户端一行关于这项内容的信息,紧跟着是对应的数据区块,直到服务器以一行“END”回应命令结束

(3)状态命令(stat)被用于查询服务器的运行状态和其他内部数据

(4)其他命令:flush_all, version, quit 等

接下来解释具体的命令,这里读起来比较绕,我下面会用图文来说明,比较容易理解

1》存储命令(set/add/replace/prepend)

命令的格式

<command><key><flags><exptime><bytes>

<data>

命令解释:

<command>:set/add/replace/prepend

<key>:关键字

<flags>:客户机使用它存储关于键值的额外信息

<exptime>:该数据的存活时间,  如果是0,就是永远存活

<bytes>存储字节数

<data block>存储数据块

存储命令的区别:

(1)set :无论如何都进行存储

(2)add:只有数据不存在时添加

(3)replace:只有数据存在时进行替换

下面对这些命令进行一一验证:

客户端输入的命令

memcached 的学习


服务器的响应

memcached 的学习

因为cjy 已经存在:所以add 命令只能增加不存在的数据

客户端输入命令
memcached 的学习

服务器响应命令

memcached 的学习



replace 用法:

客户端输入命令

memcached 的学习

服务器响应命令

memcached 的学习

因为aaa 不存在,所以不能进行替换

cjy 存在所以可以替换

客户端输入命令

memcached 的学习

服务器响应命令

memcached 的学习

接下来获取一下cjy 的值,看是否替换成功

客户端获取命令

memcached 的学习

服务器响应命令

memcached 的学习


接下来修改一下数据的存活时间

客户端输入命令

memcached 的学习

服务器响应命令

memcached 的学习

十秒过后,再去获取数据,数据已经没有了

存储命令已经差不多介绍完了

2.读取命令

get<key>

key 可以表示一个或者多个键值,由空格隔开的字串

刚才在上面已经演示过了

3.删除命令

delete <key>

客户端输入命令

memcached 的学习

服务器响应命令

memcached 的学习

4.高级命令:gets cats

客户端的命令

memcached 的学习

服务器的响应

memcached 的学习


可以看到get 命令后面有三个参数,第三个参数用来检查参数的值是否发生改变,如果发生改变,最后一个参数也会发生变化

还有cas 命令

但是我的电脑上好像检验不出来,就不上图了

我直接说cas命令

cas cjy 0 0 7 6

最后一个参数必须和gets命令的最后一个参数相同,

如果不同,就会出现EXISTS

cas 就是check and set ,只有当最后一个参数与gets 所获取的参数匹配时才能进行存储

这种设计的目的是防止使用改变了的value/key对

上面这些总结均是参考memcached 源码剖析笔记,很好的笔记,对初学memcached 很有帮助

memcached 的学习






这篇文章就先写这么多都是基础命令下一篇深度剖析实现