linux memcached默认端口,memcached介绍以及安装

今天学习了解到非关系型数据库NoSQL。对于NoSQL想必大家也有所了解,不了解的可以上网搜一下其基本原理以及相对关系型数据库有哪些优势,在这里我就不多说了。在接下来的几篇文章中我会简单讲一下memcached、redis以及MongoDB的安装及相关配置,相关文件内容都是我学习时从网上寻找的资料整理而成,希望能帮助有需要的人省去查找资料的时间,也欢迎大家评论留言互相指正互相学习。

常见的Nosql数据库有:

键值(Key-Value)数据库  :redis、memcached、riak面向文档(Document-Oriented)数据库  :MongoDB、CouchDB、RavenDB列存储(Wide Column Store/Column-Family)数据库  :Cassandra、HBase图(Graph-Oriented)数据库  :Neo4J、Infinite Graph、OrientDB

在这里我先简单介绍一下memcached。

memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。官方站点http://memcached.org/memcached运行流程图

133658rp89iiep8gwviyge.jpg

memcached特点基于C/S架构,协议简单基于libevent 的事件处理自主内存存储处理存储方式为slab allocationSlab Allocation的原理——将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。Slab是由多个Page组成的,Page按照指定大小切割成多个chunk。其结构图如下:

133705ptdx9fu0pinnuf7u.jpgGrowth Factormemcached在启动时通过-f选项可以指定 Growth Factor因子。该值控制slab之间的差异,chunk大小的差异。默认值为1.25。

Slab Allocation的缺点:Slab Allocation可以有效的解决内存碎片问题,但是在如下情况下,会导致内存的浪费:每个slab的chunk大小是固定的,当item的占用空间实际小于chunk大小时,会出现内存浪费每个slab的大小是固定的(因为page是固定的),当slab不能被他所拥有的chunk整除时,会出现内存浪费按照Growth Factor因子生成指定大小的slab,而某slab id根本未被使用时,会出现内存浪费通过memcache添加tem的时候:1.Memcache计算item的大小(key+value+flags),选取合适的slab(刚好能放下该item的slab)2.如果这个item对应的slab未出现过,则申请1个page(注意,这1M空间不论是否达到memcached使用内存都可以申请成功)并加该item存入slab中的chunk3.如果item对应的slab出现过,则在该slab中优先选择expired(free_chunks)和delete(在1.2.2中delete的chunk存在着不能被重复利用的问题)的chunk进行存储,其次将选择未使用过的chunk(free_chunks_end)进行存储。

4.如果item对应的slab出现过,但是对应的slab已经存储满了,那么会申请一个新的page,这个page被分为对应大小的chunk,继续存储。5. 如果item对应的slab出现过,但是对应的slab已经存储满了并且memcache也达到了最大内存使用。将使用lru算法,清除item(可能将未过期的item清除)此时会有eviction++数据过期方式:Lazy Expirationmemcached 内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。LRUmemcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。

适用memcached的业务场景:

1)如果网站包含了访问量很大的动态网页,因而数据库的负载将会很高。由于大部分数据库请求都是读操作,那么memcached可以显著地减小数据库负载。

2)如果数据库服务器的负载比较低但CPU使用率很高,这时可以缓存计算好的结果( computed objects )和渲染后的网页模板(enderred templates)。

3)利用memcached可以缓存session数据、临时数据以减少对他们的数据库写操作。

4)缓存一些很小但是被频繁访问的文件。

5)缓存Web ‘services’(非IBM宣扬的Web Services,译者注)或RSS feeds的结果.。

不适用memcached的业务场景:

1)缓存对象的大小大于1MB

Memcached本身就不是为了处理庞大的多媒体(large media)和巨大的二进制块(streaming huge blobs)而设计的。

2)key的长度大于250字符

3)虚拟主机不让运行memcached服务

如果应用本身托管在低端的虚拟私有服务器上,像vmware, xen这类虚拟化技术并不适合运行memcached。Memcached需要接管和控制大块的内存,如果memcached管理的内存被OS或 hypervisor交换出去,memcached的性能将大打折扣。

4)应用运行在不安全的环境中

Memcached为提供任何安全策略,仅仅通过telnet就可以访问到memcached。如果应用运行在共享的系统上,需要着重考虑安全问题。

5)业务本身需要的是持久化数据或者说需要的应该是database

接下来就是安装memcached,在这里我用yum安装,在后面的redis我用源码包安装。

yum install -y libevent  memcached  libmemcached

启动:/etc/init.d/memcached start查看进程:ps aux |grep memcached

查看memcached运行状态memcached-tool 127.0.0.1:11211  stats

默认监听127.0.0.1:11211,默认使用内存64M,我们也可以调节/etc/sysconfig/memcached这个文件中的一些参数

-d选项是启动一个守护进程-m是分配给Memcache使用的内存数量,单位是MB,这里是200MB-u是运行Memcache的用户,如果当前为 root 的话,需要使用此参数指定用户。-l是监听的服务器IP地址-p是设置Memcache监听的端口,默认是11211-c选项是最大运行的并发连接数,默认是1024-P是设置保存Memcache的pid文件

命令行用法:telnet  127.0.0.1 11211

set key1 0 60 3     //设置key1键,0是标识位,60表示过期时间为60秒,3表示value为3字节abcSTOREDget key1VALUE key1 0 3abcEND

语法规则\r\n \r\n注:\r\n表示回车a) 可以是”set”, “add”, “replace”,“delete”。“set”表示按照相应的存储该数据,没有的时候增加,有的覆盖。“add”表示按照相应的添加该数据,但是如果该已经存在则会操作失败。“replace”表示按照相应的替换数据,但是如果该不存在则操作失败。

“delete”会删除一个key值。b) 客户端需要保存数据的key。c) 是一个16位的无符号的整数(以十进制的方式表示)。该标志将和需要存储的数据一起存储,并在客户端get数据时返回。客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。d) 过期的时间。若为0表示存储的数据永远不过时(但可被服务器算法:LRU 等替换)。如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。e) 需要存储的字节数,当用户希望存储空数据时可以为0f) 需要存储的内容,输入完成后,最后客户端需要加上”\r\n”(windows直接点击Enter)作为”命令头”的结束标志。

下一篇文章会讲解php结合memcached。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值