Memcached使用总结

   Memcached简介

Memcached是一个高性能、分布式的内存对象缓存系统,是由 Danga Interactive 开发并使用 BSD 许可的一种通用的分布式内存缓存系统。Danga Interactive 开发 memcached 的目的是创建一个内存缓存系统来处理其网站 LiveJournal.com 的巨大流量。每天超过 2000 万的页面访问量给 LiveJournal 的数据库施加了巨大的压力,因此 Danga Brad Fitzpatrick 便着手设计了 memcachedmemcached 不仅减少了网站数据库的负载,还成为如今世界上大多数高流量网站所使用的缓存解决方案。
      Memcached
广泛应用在大负载高并发的网站上,是一种非常成熟的产品(称为一项技术也未尝不可)。像 facebookyoutube,yahoo,sinasohunetease,豆瓣等网站均或多或少使用了该项产品。memcached在以用户为中心的网站上,表现尤其突出,例如sns,blogweb2.0应用的站点。这些站点一般来讲,特别注重用户体验,用户对服务器的响应速度要求很高,用户数据相对比较复杂、关连度比较高,需要经常对数据库进行更新和检索。

官方网站:http://www.danga.com/memcached

Memcached工作机制

Memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端首先与 Memcached 服务建立连接,然后存取对象。每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存的时候还可以设置有效期。保存在 Memcached 中的对象实际上是放置在内存中的,而不是在硬盘上。Memcached 进程运行之后,会预申请一块较大的内存空间,自己进行管理,用完之后再申请一块,而不是每次需要的时候去向操作系统申请,其将对象保存在一个巨大的Hash表中,它还使用NewHash算法来管理Hash表,从而获得进一步的性能提升。所以当分配给Memcached的内存足够大的时候, Memcached的时间消耗基本上只是网络Socket连接了,Memcached按照LRU方式调度数据。LRULeast Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的。LRU算法在实际的工作环境中会与操作系统相关,比如32位的操作系统,最大的寻址空间是4G,如果当前内存的使用超过了这个限度,将被调出内存,内存中总维持最新最常用的数据。64位操作系统大大扩展了内存的寻址能力,所以现在很多memcached服务都是运行在64位系统上。

Memcached是一款基于Libevent多路异步I/O技术的内存共享系统,可以达到2000/秒平均查询,并且服务器CPU消耗依然不到10%。通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度。但是这些对象并不是持久的,服务停止之后,里边的数据就会丢失。允许多个server通过网络形成一个大的hash,用户不必关心数据存放在哪,只调用相关接口就可以。存放在内存的数据通过LRU算法进行淘汰出内存,同时可以通过删除和设置失效时间来淘汰存放在内存的数据, 服务器端采用slab机制管理内存空间。

 

使用流程

步骤

操作

1

检查用户请求的数据在缓存中是否有存在,若存在的话,只需要直接把请求的数据返回。

2

如果请求的数据在缓存中找不到,这时候再去查询数据库,返回请求数据的同时把数据存储到缓存中一份

3

保持缓存的新鲜性,每当数据发生变化的时候如数据有被修改、删除的情况要同步更新缓存信息,确保用户不会在缓存取到旧的数据。

 

Memcached安装与管理

       安装步骤

安装软件说明

libevent 是安装 memcached 的唯一前提条件。它是 memcached 所依赖的异步事件通知库。

软件

版本

libevent

1.4.12

memcached

1.4.5

 

1)         安装libevent,将软件上传到/opt文件夹下

cd /opt
tar zxvf libevent-1.4.12-stable.tar.gz   
cd libevent-1.4.12-stable

./configure         

make                                     

make install

 

2)         安装memcached,将软件上传到/opt文件夹下

cd /opt
tar zxvf memcached-1.4.5.tar.gz   
cd memcached-1.4.5.

./configure         

make                                     

make install

3)         检查安装是否成功,若出现如下信息表示已成功

ls -al /usr/local/bin/mem*

-rwxr-xr-x 1 root root 202029 Nov 15 23:07 /usr/local/bin/memcached

        管理说明

1)         启动参数说明

如下命令是root用户以守护进程的形式启动 memcached,为其分配 256M 内存

./memcached -d -m 256 -u root

主要启动参数说明

参数

说明

-d

以守护程序(daemon)方式运行 memcached

-m

设置memcached可以使用的内存大小,单位为 M

-l <ip_addr>

设置MEM接口监听的 IP地址,如果是本机的话,通常可以不设置此参数

-p <num>     

-U <num>

设置监听的tcp/udp端口,默认为 11211,所以也可以不设置此参数;

-u

指定用户

-c <num>

最多并发连接数,默认为1024

-n <bytes>

键值对数据最少分配空间,默认为48b

-t <num>

使用的线程数,默认为4

-R

每个事件的最多请求数(一个连接的最多交互数据的次数),默认为20

2)         管理参数说明

管理命令语法格式

command <key> <flags> <expiration time> <bytes>

<value>

管理命令说明

管理命令

说明

基本命令

set

set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换. 如果使用 set 命令正确设定了键值对,服务器将使用单词 STORED 进行响应。

add

仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应 NOT_STORED

replace

仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应。

get

使用语法 command <key>

delete

使用语法 command <key>

高级命令

gets

gets 命令的功能类似于基本的 get 命令。两个命令之间的差异在于gets 返回的信息稍微多一些,多返回的整型值非常像名称/值对的 “版本” 号。

cats

cascheck set)是一个非常便捷的 memcached 命令,用于设置名称/值对的值(如果该名称/值对在您上次执行 gets 后没有更新过)。它使用与 set 命令相类似的语法,但需要指定版本号(gets 返回的额外值),否则写入无效。

缓存管理命令

stats

统计所连接的 memcached 实例的当前统计数据。通过其获取的参数分析缓存利用率用以优化程序。

flush_all

用于清理缓存中的所有名称/值对,将缓存重置到干净的状态。

管理命令参数说明

参数

说明

key

key 用于查找缓存值

flags

可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息

expiration time

在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)

bytes

在缓存中存储的字节点

value

存储的值(始终位于第二行)

指令操作示例及说明

telnet 192.168.15.111  11211

#登录memcached服务

 

set userid 0 0 5

12345

STORED

 

#存储key=userid value=12345数据

 

#mem响应保存成功

 

add userid 0 0 5

12345

NOT_STORED

#再次存储key=userid数据

 

#由于该key已经存在,mem响应失败

 

replace userid 0 0 5

54321

STORED

#替换key=userid 数据的value=54321

 

#mem响应成功

 

get userid

VALUE userid 0 5

54321

END

#获取key=userid的值

 

 

 

 

gets userid

VALUE userid 0 5 10

54321

END

#可以理解为获取版本号10key/value数据

 

 

#获取成功

cas userid 0 0 5 10

55555

STORED

#修改版本号位10key=userid数据

 

 

 

delete userid

DELETED

#删除key=userid的数据

#删除成功

3)         添加开机自启服务,在/etc/rc.local文件中加载启动命令,参数需要根据实际情况指定,如

/xxx/xxx/memcached -d -m 256 -u root

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值