缓存技术之memcached(一)安装与常用命令详解

一、memcached 的基本介绍

 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

 本质上,它是一个简洁的key-value存储系统。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

二、 linux  下编译 memcached

2.1.1: 准备编译环境
在 linux 编译,需要 gcc,make,cmake,autoconf,libtool 等工具,
这几件工具, 以后还要编译 redis 等使用,所以请先装.
在 linux 系统联网后,用如下命令安

#yum install gcc make cmake autoconf libtool



2.1.2:  编译 memcached
memcached 依赖于 libevent 库,因此我们需要先安装 libevent.
分别到 libevent.org 和 memcached.org 下载最新的 stable 版本(稳定版).
先编译 libevent ,再编译 memcached,
编译 memcached 时要指定 libevent 的路径.

# tar zxvf libevent-2.0.21-stable.tar.gz
# cd libevent-2.0.21-stable
# ./configure --prefix=/usr/local/libevent
# 如果出错,读报错信息,查看原因,一般是缺少库
# make && make install
# tar zxvf memcached-1.4.5.tag.gz
# cd memcached-1.4.5
#./configure--prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent
# make && make install
注意: 在虚拟机下练习编译,一个容易碰到的问题---虚拟机的时间不对,
导致的 gcc 编译过程中,检测时间通不过,一直处于编译过程.
解决:
# date -s ‘yyyy-mm-dd hh:mm:ss’
# clock -w # 把时间写入 cmos

2.2 memcached  的启动

# /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nobody -vv
slab class 1: chunk size 96 perslab 10922
slab class 2: chunk size 120 perslab 8738
slab class 3: chunk size 152 perslab 6898
slab class 4: chunk size 192 perslab 5461
....
....
slab class 9: chunk size 600 perslab 1747
slab class 10: chunk size 752 perslab 1394
slab class 39: chunk size 493552 perslab 2
slab class 40: chunk size 616944 perslab 1
slab class 41: chunk size 771184 perslab 1
slab class 42: chunk size 1048576 perslab 1
 我们发现 memcached 已经启动,并把信息输出到控制台..
 如果我们想让 memcached 作为 daemon 在后台运行,只需要加-d 选项

# /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nobody -d
 如果想了解 -m -p 等参数的意义, 可以通过 memcached -h 查看帮助.

-p <num> tcp port number to listen on (default: 11211) // 监听
的端口
-u <num> udp port number to listen on (default: 0, off)
-s <file> unix socket path to listen on (disables network support)
-a <mask> access mask for unix socket, in octal (default 0700)
-l <ip_addr> interface to listen on, default is indrr_any
-d start tell memcached to start
-d restart tell running memcached to do a graceful restart
-d stop|shutdown tell running memcached to shutdown
-d install install memcached service // 把 memcached 注册成服务
-d uninstall uninstall memcached service
-r maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num> max memory to use for items in megabytes, default is 64
mb //分配给 memcached 的最大内存
-m return error on memory exhausted (rather than removing
items)
-c <num> max simultaneous connections, default is 1024 // 最大
的连接数
-k lock down all paged memory. note that there is a
limit on how much memory you may lock. trying to
allocate more than that would fail, so be sure you
set the limit correctly for the user you started
the daemon with (not for -u <username> user;
under sh this is done with 'ulimit -s -l num_kb').
-v verbose (print errors/warnings while in event loop) //
输出错误信息
-vv very verbose (also print client commands/reponses) //
输出所有信息
-h print this help and exit
-i print memcached and libevent license
-b run a managed instanced (mnemonic: buckets)
-p <file> save pid in <file>, only used with -d option
-f <factor> chunk size growth factor, default 1.25 //增长因子
-n <bytes> minimum space allocated for key+value+flags, default 48
 附: 在 在 windows  下启动 memcached:
 在 windows 下,下载 memcached 的 win 二进制版本.
 下载地址: http://www.zixue.it/thread-9030-1-1.html
 下载解压后,不用安装,通过命令行下进入到 memcached.exe 所在的目录

在 win 下启动
>memcached -m 64 -p 11211 -vvv
2.3 memcached  的连接
 memcached 客户端与服务器端的通信比较简单,使用的基于文本的协议,而不是二进制协议.
(http 协议也是这样), 因此我们通过 telnet 即可与 memcached 作交互.

 另开一个终端,并运行 telnet 命令 (开启 memcached 的终端不要关闭),win7默认下不开启telnet客户端,需要自己去手动开启,具体操作我这里就不具体介绍了,百度一大堆解决方案。

另开一个终端,并运行 telnet 命令 (开启 memcached 的终端不要关闭,关闭就不能运行memcached)

# 格式 telnet host port
# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
2.4 memcached 

分 增删改查统计 5 类,沿着这个思路来学习.
1. 增: add 往内存增加一行新记录

语法: add key flag expire length 回车


key 给值起一个独特的名字
flag 标志,要求为一个正整数
expire 有效期
length 缓存的长度(字节为单位)

下面解释一下各个字段的意义:

flag 的意义:
memcached 基本文本协议,传输的东西,理解成字符串来存储.
想:让你存一个 php 对象,和一个 php 数组,怎么办?
答:序列化成字符串,往出取的时候,自然还要反序列化成 对象/数组/json 格式等等.
这时候, flag 的意义就体现出来了.
比如, 1 就是字符串, 2 反转成数组 3,反序列化对象.....

expire 的意义:
设置缓存的有效期,有 3 种格式
1:设置秒数, 从设定开始数,第 n 秒后失效.
2:时间戳, 到指定的时间戳后失效.
比如在团购网站,缓存的某团到中午 12:00 失效. add key 0 1379209999 6
3: 设为 0. 不自动失效.

注: 有种误会,设为 0,永久有效.错误的.
1:编译 memcached 时,指定一个最长常量,默认是 30 天.
所以,即使设为 0,30 天后也会失效.
2:可能等不到 30 天,就会被新数据挤出去.

2.delete 删除
delete key [time seconds]
删除指定的 key. 如加可选参数 time,则指删除 key,并在删除 key 后的 time 秒内,不允许
get,add,replace 操作此 key.

3.replace 替换
replace key flag expire length
参数和 add 完全一样,不单独写

4.get 查询
get key
返回 key 的值

5.set 是设置和修改值
参数和 add ,replace 一样,但功能不一样.


用 add 时, key 不存在,才能建立此键值.
但对于已经存在的键,可以用 replace 进行替换/更改


repalce,key 存在时,才能修改此键值,如上图,date 不存在,则没改成功

而 set 想当于有 add replace 两者的功能.
set key flag expire leng 时
如果服务器无此键 ----> 增加的效果
如果服务器有此键 ----> 修改的效果.
如下图的演示,该图中,name 是已经存在,而 date 原本不存在. set 都可以成功设置他们.


6.incr ,decr 命令:增加/减少值的大小
语法: incr/decr key num
示例:

set age 0 0 2
28
stored
get age
value age 0 2
28
end
incr age 1
29
incr age 2
31
decr age 1
30
decr age 2
28
注意:incr,decr 操作是把值理解为 32 位无符号来+-操作的. 值在[0-2^32-1]范围内

应用场景------秒杀功能,
一个人下单,要牵涉数据库读取,写入订单,更改库存,及事务要求, 对于传统型数据库来说,
压力是巨大的.
可以利用 memcached 的 incr/decr 功能, 在内存存储 count 库存量, 秒杀 1000 台
每人抢单主要在内存操作,速度非常快,
抢到 count<=1000 的号人,得一个订单号,再去另一个页面慢慢支付

7.统计命令: stats
把 memcached 当前的运行信息统计出来

运行命令:stats

stat pid 2296 进程号
stat uptime 4237 持续运行时间
stat time 1370054990
stat version 1.2.6
stat pointer_size 32
stat curr_items 4 当前存储的键个数
stat total_items 13
stat bytes 236
stat curr_connections 3
stat total_connections 4
stat connection_structures 4
stat cmd_get 20
stat cmd_set 16
stat get_hits 13
stat get_misses 7 // 这 2 个参数 可以算出命中率
stat evictions 0
stat bytes_read 764
stat bytes_written 618
stat limit_maxbytes 67108864
stat threads 1
end
缓存有一个重要的概念: 命中率.
命中率是指: (查询到数据的次数/查询总数)*100%
如上, 13/(13+7) = 60+% , 的命中率.

8.flush_all 清空所有的存储对象



 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值