设为首页 收藏本站
查看: 1041|回复: 0

[经验分享] Linux下搭建Memcached缓存系统

[复制链接]

尚未签到

发表于 2015-11-19 07:07:50 | 显示全部楼层 |阅读模式
首先说下抱歉,博主最近单位经常加班,博客更新有点慢,希望大家理解,草稿箱里存了不少内容,等不忙时候一点点填坑~
在一般的网站开发学习时候,都会把数据存放在RDBMS(关系型数据库系统(Relational Database Management System)中,服务器程序通过读取RDBMS来取得数据显示在页面上。这在我们以往编写练习项目时候,是没有任何问题的。根据木桶理论,一只水桶能装多少水取决于它最短的那块木板,在实际的网站开发中,随着数据量的增大,访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。
这时候就轮到Memcached大显身手了,顾名思义,Memcached是一套通过内存实现的缓存系统,而且它实现了分布式存储。一般我们使用Memcached的目的,是通过缓存数据库的一部分内容,减少对数据库的访问,从而提高网站性能。
DSC0000.png
试想一下这么个情况,我们平常上的淘宝网,首页里面有商品分类、商品品牌、热销商品、各种活动的展示。在不使用缓存的情况下,我们访问首页,需要到RDBMS中查询分类、品牌、热销、活动等数十张表,会导致网站响应缓慢。其实这些首页的数据,每天的变化不是很频繁,对实时性的要求不是很高。我们可以让每次访问首页的时候,程序从缓存中读取首页需要展示的数据,从而减少对RDBMS的压力。假设原本每秒访问一次,现在直接访问缓存,缓存每5分钟刷新,那么对RDBMS的访问只有原来的1/300。更何况实际使用中,网站的访问,远远不止每秒一次,即使每秒10次、100次,对于RDBMS的访问都是固定的。
Memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。Memcached的分布式完全是在客户端实现的,客户端会根据保存的key来决定保存数据的Memcached服务器。同样,取得数据的时候,也会根据key来从不同服务器上取得数据。这样,将不同的键保存到不同的服务器上,就实现了Memcached的分布式。 Memcached服务器增多后,键就会分散,即使一台Memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。
Memcached缓存系统的搭建其实十分简单,在这里以Linux下面的搭建为例:
系统环境ubuntu15.04 64位

安装Memcached服务器端只需要一句命令
sudo apt-get install memcached
安装完成后通过以下命令启动Memcached

memcached -d -m 128 -p 11211 -u root
顺便说下memcached的启动参数
-d 选项是启动一个守护进程,
-m 是分配给Memcache使用的内存数量,单位是MB,这里是128MB,默认是64MB
-u 是运行Memcache的用户,这里是root
-l 是监听的服务器IP地址,默认应该是本机
-p 是设置Memcache监听的端口,默认是11211,最好是1024以上的端口
-c 选项是最大运行的并发连接数,默认是1024,这里设置了10240,按照你服务器的负载量来设定
-P 是设置保存Memcache的pid文件位置
-h 打印帮助信息
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息

开发时候建议加上-vv,此时会显示客户端的请求信息,比较方便我们进行调试,而且显示的效果比较cool。
DSC0001.png
Memcached安装完毕后,可以通过telnet ip 端口进行连接,如telnet 127.0.0.1 11211。
连接上Memcached服务器之后,可以通过命令行对缓存进行操作。
常用的Memcached命令有5种。
set
add
replace
get
delete

前三个命令是用于操作存储在 Memcached中的键值对的标准修改命令。它们都非常简单易用,且都使用如下所示的语法:
command

参数 用法
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节点
value 存储的值(始终位于第二行)

现在,我们来看看这些命令的实际使用。
无论如何都存储的set
set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。

DSC0002.png
只有数据不存在时进行添加的add
仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,将获得响应NOT_STORED。

DSC0003.png
只有数据存在时进行替换的replace
仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,将获得响应NOT_STORED。

DSC0004.png
get
get 命令用于取得之前添加的键值对相关的值,get命令的key可以表示一个或者多个键,键之间以空格隔开。

DSC0005.png
gets
不能顾名思义的认为get是返回单个key,gets可以查询多个key,gets命令的功能类似于基本的get命令。两个命令之间的差异在于,gets返回的信息稍微多一些。

DSC0006.png
可以看到,gets命令比普通的get命令多返回了一个数字(上图中为3和2)。这个数字可以检查数据是否发生改变。当key对应的数据改变时,这个多返回的数字也会改变。
delete
delete 用来删除Memcached中的任何现有值,删除已存在的键值和不存在的记录会返回不同的结果。

DSC0007.png
flush_all
这个命令的用处很简单,它总是执行成功,服务器会发送OK回应。它的效果是使已经存在的缓存项目立即失效(缺省)。flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由Memcached的懒惰检测和删除机制决定的)。

DSC0008.png
stats
stats 命令的功能正如其名:输出所连接的 Memcached实例的当前统计数据。



转载自我的技术博客:
http://www.cc-lab.cn/memcachedonlinux/
(完)

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140852-1-1.html 上篇帖子: Linux c 开发 下篇帖子: Memcached 与 Wowza 项目的集成
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表