用户工具

站点工具


分享:技术:memcached:memcached的介绍

memcached的介绍

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提高Web应用扩展性的重要因素。

许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。

这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。

memcached的特点

  • 协议简单
  • 基于libevent的事件处理
  • 内置内存存储方式
  • memcached不互相通信的分布式

memcached的安装

在Ubuntu14.04上安装如下:

sudo apt-get install memcached

安装好,默认启动memcached,默认端口是11211

#启动脚本:-m指定内存单位M,-p指定端口,-u指定用户,-l指定memcached server的ip
sudo /etc/init.d/memcached start -m 64 -p 11211 -u memcache -l 127.0.0.1

#关闭脚本
sudo /etc/init.d/memcached stop

#连接memcached server
gxx@iZ23goxo66aZ:~$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

#退出memcached server
quit
Connection closed by foreign host.
gxx@iZ23goxo66aZ:~$ 

memcached的常用命令

存储命令/读取命令

存储命令的格式:

<command name> <key> <flags> <exptime> <bytes>
<data block>

参数说明如下:

<command name> set/add/replace
<key> 查找关键字
<flags> 客户机使用它存储关于键值对的额外信息
<exptime> 该数据的存活时间,0表示永远
<bytes> 存储字节数
<data block> 存储的数据块(可直接理解为key-value结构中的value)
gxx@iZ23goxo66aZ:~$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set name 0 0 3 #set设置name,不管是否存在,长度为3字节
gxx
STORED
get name #get获取name
VALUE name 0 3
gxx
END
add name 0 0 3 #add添加name,已存在,添加失败
lqy
NOT_STORED
add pwd 0 0 6 #add添加pwd,不存在,添加成功
123456
STORED
replace notexist 0 0 3 #replace替换notexist,不存在,替换失败
123
NOT_STORED
replace pwd 0 0 3 #replace替换pwd,已存在,替换成功
123
STORED
get pwd #get获取pwd
VALUE pwd 0 3
123
END
delete pwd #delete删除pwd,删除成功
DELETED
get pwd #get获取pwd,不存在,直接返回END
END
get name #get获取name
VALUE name 0 3
gxx
END
gets name #gets获取name,后面多返回一个类似版本号的数字,当name值改变时,这个多返回的数字也会改变
VALUE name 0 3 12
gxx
END

状态命令

stats #查看状态
STAT pid 9167
STAT uptime 105193
STAT time 1437545041
STAT version 1.4.14 (Ubuntu)
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 2.010588
STAT rusage_system 0.816230
STAT curr_connections 5
STAT total_connections 13
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 20
STAT cmd_set 16
STAT cmd_flush 1
STAT cmd_touch 0
STAT get_hits 15
STAT get_misses 5
STAT delete_misses 0
STAT delete_hits 2
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 1084
STAT bytes_written 7545
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT bytes 365
STAT curr_items 5
STAT total_items 14
STAT evictions 0
STAT reclaimed 0
END
stats items #查看项状态
STAT items:1:number 5
STAT items:1:age 75765
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END

字符拼接命令

set name 0 0 3 #set设置name
gxx
STORED
get name #get获得name
VALUE name 0 3
gxx
END
append name 0 0 2 #append在name后面拼接2个字节
12
STORED
get name #get获得name
VALUE name 0 5
gxx12
END
prepend name 0 0 3 #prepend在name前面拼接3个字节
123
STORED
get name #get获得name
VALUE name 0 8
123gxx12
END
flush_all #flush_all清空所有数据
OK
get name #get获得name,返回空
END

加减计数命令

set count 0 0 1 #set设置count为1
1
STORED
incr count 1 #incr给count加1为2
2
incr count 5 #incr给count加5为7
7
get count #get获得count
VALUE count 0 1
7
END
decr count 2 #decr给count减2为5
5
get count #get获得count
VALUE count 0 1
5
END

memcached的业务场景

适用的场景

  1. 如果网站包含了访问量很大的动态网页,因而数据库的负载将会很高。由于大部分数据库请求都是读操作,那么memcached可以显著地减小数据库负载。
  2. 如果数据库服务器的负载比较低但CPU使用率很高,这时可以缓存计算好的结果( computed objects )和渲染后的网页模板(enderred templates)。
  3. 利用memcached可以缓存 session数据 、临时数据以减少对他们的数据库写操作。
  4. 缓存一些很小但是被频繁访问的文件。
  5. 缓存Web 'services'(非IBM宣扬的Web Services,译者注)或RSS feeds的结果.。

不适用的场景

  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/memcached的介绍.txt · 最后更改: 2015/07/22 14:22 由 gxx