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 有四种类型的命令
(1)存储命令(set/add/replace/append/prepend)
首先得启动memcached
启动命令和效果:
第二步:用telnet 连接
记得移动要在客户端输入set/add等命令(我刚开始学的时候,在服务器端输入数据,咋都不出结果,尴尬,自己有点傻)
输入上面的set命令之后,就会自动出现STORED 说明你输入的数据已经存储(客户端的显示)
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:只有数据存在时进行替换
下面对这些命令进行一一验证:
客户端输入的命令
服务器的响应
因为cjy 已经存在:所以add 命令只能增加不存在的数据
客户端输入命令
服务器响应命令
replace 用法:
客户端输入命令
服务器响应命令
因为aaa 不存在,所以不能进行替换
cjy 存在所以可以替换
客户端输入命令
服务器响应命令
接下来获取一下cjy 的值,看是否替换成功
客户端获取命令
服务器响应命令
接下来修改一下数据的存活时间
客户端输入命令
服务器响应命令
十秒过后,再去获取数据,数据已经没有了
存储命令已经差不多介绍完了
2.读取命令
get<key>
key 可以表示一个或者多个键值,由空格隔开的字串
刚才在上面已经演示过了
3.删除命令
delete <key>
客户端输入命令
服务器响应命令
4.高级命令:gets cats
客户端的命令
服务器的响应
可以看到get 命令后面有三个参数,第三个参数用来检查参数的值是否发生改变,如果发生改变,最后一个参数也会发生变化
还有cas 命令
但是我的电脑上好像检验不出来,就不上图了
我直接说cas命令
cas cjy 0 0 7 6
最后一个参数必须和gets命令的最后一个参数相同,
如果不同,就会出现EXISTS
cas 就是check and set ,只有当最后一个参数与gets 所获取的参数匹配时才能进行存储
这种设计的目的是防止使用改变了的value/key对
上面这些总结均是参考memcached 源码剖析笔记,很好的笔记,对初学memcached 很有帮助
这篇文章就先写这么多都是基础命令下一篇深度剖析实现