Memcached 笔记与总结(1)Linux(CentOS 6.6) 和 Windows(7)下安装与配置 Memcached (1.4.24)与 Memcached 基础命令
Memcached 官方网站:http://memcached.org/
官网对其的描述是:
What is Memcached? Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering. Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.
Memcached 是一款免费、开源、高性能、分布式的内存对象缓存系统,它以键值对的形式存储数据,数据只能是字符串型,可以把 Memcached 假象成一个只有一张表的数据库:
| key | varchar(255) |
| value | text |
Memcached 的使用场景最好是分布式环境,如果只有一台服务器,则建议直接在关系型数据库中存储和读取数据。最好有单独的 Memcached 服务器。
当前最新版本(stable 稳定版)是 1.4.24,源码包下载地址:http://www.memcached.org/files/memcached-1.4.24.tar.gz
memcached 依赖于 libevent 库,需要先编译 libevent,下载地址:http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
安装过程:
libevent:
① 解压
[root@localhost src]# tar -zxvf libevent-2.0.-stable.tar.gz
② 进入目录
[root@localhost src]# cd libevent-2.0.-stable
③ 配置
可以通过
[root@localhost libevent-2.0.-stable]# ./configure -h
来查看编译选项。
配置:
[root@localhost libevent-2.0.-stable]# ./configure --prefix=/usr/local/libevent
④ 编译 && 安装
[root@localhost libevent-2.0.-stable]# make && make install
memcached
① 解压:
[root@localhost src]# tar -zxvf memcached-1.4..tar.gz
② 进入目录
[root@localhost src]# cd memcached-1.4.
③ 配置
[root@localhost memcached-1.4.]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
④ 编译 && 安装
[root@localhost memcached-1.4.]# make && make install
⑤ 运行 memcached
[root@localhost local]# cd memcached/
[root@localhost memcached]# ll
总用量
drwxr-xr-x root root 8月 : bin
drwxr-xr-x root root 8月 : include
drwxr-xr-x root root 8月 : share
[root@localhost memcached]# ll bin/
总用量
-rwxr-xr-x root root 8月 : memcached
[root@localhost memcached]# ./bin/memcached -p -m -vvv
can't run as root without the -u switch
出现 can't run as root without the -u switch 的原因是不能以 root 用户运行 memcached
查看当前用户:
[root@localhost memcached]# whoami
root
解决方案,以 nobody 身份启动 memcached:
[root@localhost memcached]# ./bin/memcached -p -m -u nobody -vvv
可以在本地使用 telnet 连接虚拟机上的 memcached
telnet 192.168.254.100

如果需要 memcached 在后台执行,可以使用
[root@localhost memcached]# ./bin/memcached -p -m -u nobody -d
附:Windows(7 64位)下安装 memcached(1.4.24)及 memcached 的常用命令
下载地址:http://wendal.net/2015/04/27.html
下载解压,把主文件夹拷贝至任一目录,并且重命名为 "memcached"
①打开 "cmd",进入该目录:

②查看 memcached 版本和帮助
D:\memcached>memcached -h

③ 安装 memcached:
D:\memcached>memcached -d install

④ 开启 memcached:
D:\memcached>memcached.exe -p -l 127.0.0.1 -m -d start

或者
如果需要把错误信息或者警告信息在服务器端输出,可以:
D:\memcached\memcached.exe -m -p -vvv

也就是说此时在客户端进行的操作,服务器端会显示信息:

memcached 参数说明
-p:端口号,默认11211
-l:绑定地址 ( 默认:所有都允许,无论内外网或者本机更换 IP,有安全隐患,若设置为127.0.0.1就只能本机访问 )
-m:使用内存的大小,单位 mb
-c:最大同时连接数,默认是1024
-f:增长因子(每两个相邻 chunk 的大小比例),默认 1.25
⑤ 本机使用 telnet 进行客户端测试:
另外开启一个 cmd 窗口

使用 ctrl + ] 打开回显功能。
具体操作
Memcached 的操作分为系统类操作,包括 addServer, addServers, getStats, getVersion; 数据类操作:add, set, delete, flush, replace, increament, get; 高级方法:setMulti, deleteMulti, getMulti, getResultCode, getResultMessage
其中 addServers 的格式是 addServers(array)
array 的形式是
array(
array('127.0.0.1', 11211),
array('127.0.0.2', 11211)
)
添加一个键值存储:

add 语法:
add key flag expire length
flag:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息(如区分保存的值是字符串,或者序列化的对象等,取值时可以做相应的处理)
expire:在缓存中保存键值对的时间长度(以秒为单位,0 表示不主动清除)
length:长度,以字节为单位
add 已经存在的 key 是不能成功的:

获取(查询)某个键的值:get key

expire 可以是秒数(n 秒后失效),也可以是时间戳(什么时间失效),例如:
10 秒后失效

再例如当前时间戳是:1440774503
设置 100 秒后失效:

delete 删除键值

replace 替换值,参数和 add 一样:

replace 不能对不存在的键进行修改:

set 同时具有 add 和 replace 的功能,参数和 add 一样:

set 命令既可以修改已经存在的键的值,也可以增加不存在的键值。
incr key n :键 key 的值增加 n
decr key n :键 key 的值减少n

注意:key 的值是 32 位无符号的数
decr 应用场景:秒杀功能
下单时,有一系列的数据库操作,如写入订单、更改库存,还有事务要求,对于传统关系型数据库来说压力很大。
而秒杀的操作,是先秒抢一个订单号,余下的例如个人收货信息填写等操作可以不着急进行(可以凭借该订单号去另一个页面慢慢下订单、zhi'fu)。发订单号的操作就可以利用 memcached 的 decr 功能:
在内存中存储一个键值对 count 用来记录库存量,秒杀 n 件,则 count 的值是 n。秒杀时,对库存进行 memcached 的 decr 操作,然后进行判断返回的值,当返回的值大于 0,就说明抢单成功。当返回的值等于 0,活动结束。
也可以使用 incr 命令(秒杀 n 件,当 incr 返回的值等于 n 时,活动结束)。
由于抢单的主要操作都是在内存中进行,因此速度很快。
stats :统计

stats
STAT pid 5368 #进程号
STAT uptime 3949 #持续运行时间
STAT time
STAT version 1.4.
STAT libevent 2.0.-stable
STAT pointer_size
STAT rusage_user 0.202000
STAT rusage_system 0.343000
STAT curr_connections
STAT total_connections
STAT connection_structures
STAT reserved_fds
STAT cmd_get 4
STAT cmd_set
STAT cmd_flush
STAT cmd_touch
STAT get_hits 3
STAT get_misses 1 # get_hits 和 get_misses 可以计算缓存命中率
STAT delete_misses
STAT delete_hits
STAT incr_misses
STAT incr_hits
STAT decr_misses
STAT decr_hits
STAT cas_misses
STAT cas_hits
STAT cas_badval
STAT touch_hits
STAT touch_misses
STAT auth_cmds
STAT auth_errors
STAT bytes_read
STAT bytes_written
STAT limit_maxbytes
STAT accepting_conns
STAT listen_disabled_num
STAT threads
STAT conn_yields
STAT hash_power_level
STAT hash_bytes
STAT hash_is_expanding
STAT malloc_fails
STAT bytes
STAT curr_items 2 #当前存储的键的个数
STAT total_items
STAT expired_unfetched
STAT evicted_unfetched
STAT evictions
STAT reclaimed
STAT crawler_reclaimed
STAT crawler_items_checked
STAT lrutail_reflocked
END
flush_all:清除所有的键值。正在运行的系统上慎用。

此时 stats 查看统计时,curr_items 显示当前还有存储的键值,是因为过期所采用的是惰性失效机制。
memcached 内存分配机制
memcached 缓解内存的碎片化采用 slab allocator 机制来管理内存:预先把内存划分成若干个 slab 仓库,每个仓库切分成不同尺寸的小块,需要存内容时判断内容的大小,根据内容的大小选择合适的仓库。
注意:如果有 100 Byte 的数据要存储,但 122 Byte 大小的仓库中的 chunk 满了,memcached 并不会寻找更大的仓库如 144 Byte 的仓库来存储该数据,而是把 122 Byte 仓库的就数据踢掉。
LRU 删除机制
memcached 的过期数据删除机制:
当某个值过期后,并没有从内存中删除,因此 stats 统计时,curr_items 仍然有其信息;
当取该值的时候,判断是否过期,如果过期,返回空,并清空,此时 curr_items 就减少了;
有过之前没有 get 过,不会自动删除;
只有当某个新值占用它的位置时,当成空 chunk 来占用。
这个过期只是让用户看不到数据,并没有在过期的瞬间将其从内存中删除,称之为 lazy expriation(惰性失效机制),好处是 节省了 CPU 资源和检测的成本。
LRU:Least Recently Used 最近最少使用。不论这个最近最少使用的值是否是永久有效,当某个新值要占据它的位置时,它都会被踢掉。
memcached 的 key 的长度不超过 250 个字符 ,value 的长度不超过 1024 * 1024 个字符即 1M,推荐使用默认配置,也可以通过直接修改memcached.h源码来加大长度限制。在 32 位系统下内存最大设置为 2G,但一般不会在同一个 memcached 实例中进行存储(如果 memcached 服务挂了,有可能瞬间击穿 mysql 服务)。
参考:
http://www.2cto.com/os/201209/153833.html
http://blog.csdn.net/zzulp/article/details/7823511
http://www.linuxidc.com/Linux/2014-10/108199.htm
Memcached 笔记与总结(1)Linux(CentOS 6.6) 和 Windows(7)下安装与配置 Memcached (1.4.24)与 Memcached 基础命令的更多相关文章
- 在Windows平台下安装与配置Memcached及C#使用方法
1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...
- [Linux]三种方案在Windows系统下安装ubuntu双系统(转)
在学习linux的过程中,ubuntu无疑是初学者的最佳选择. 下面来列举给Windows系统安装ubuntu双系统的三种方法. 一.虚拟机安装(不推荐) 使用工具:Vmware 如果不是因为迫不得已 ...
- 在Windows平台下安装与配置Memcached的方法分享
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.Memcached ...
- linux ----> centos 网络、tomcat、vi、等等的配置和使用
网络/配置 环境: centos6.8-mini-version virtualbox 工具: FileZilla client SecureCRT 静态ip地址 每一台计算机分配有一个固定的IP地 ...
- 在linux下安装并配置mysql数据库
在linux下安装并配置mysql数据库 工具/原料 MySql5.6 CentOS 方法/步骤 1 查找以前是否安装有mysql,使用下面命令: rpm -qa|grep -i mysql ...
- Linux下安装和配置JDK与Tomcat(升级版)
在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...
- [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
为了更好的排版, 所以将IK分词器的安装重启了一篇博文, 大家可以接上solr的安装一同查看.[Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://ww ...
- centos 6.5下安装、配置并启动SSH远程访问
centos 6.5下安装.配置并启动SSH远程访问 1.登录centos 6.5系统,使用root用户登录,如果为非root用户则执行su或su - 或su root或su - root切换为roo ...
- Linux下安装与配置Nginx
一.准备 Nginx版本:nginx-1.7.7.tar.gz 请自行到官网下载对应的版本. 二.步骤 ♦在Linux新建一个queenLove用户 [root@localhost /]# use ...
- 如何在Windows环境下安装Linux系统虚拟机
如何在Windows环境下安装Linux系统虚拟机 本篇经验写给想要入门学习C语言的小白们.Windows系统因为使用窗口图形化,操作简单,功能多样,所以我们在Windows环境下可以做到很多,但想要 ...
随机推荐
- 一、HTML和CSS基础--网页布局--实践--固定层效果
absolute和fixed的相同点: 第一,完全脱离标准文档流 第二,未设置偏移量时,都定位在父元素的左上角 absolute和fixed的不同点: 第一.当设置偏移量时,偏移参照基准不同 abso ...
- jQuery Mobile 基础(第二章)
1.可折叠块: <div data-role="collapsible"> <h1>点击我 - 我可以折叠!</h1> <p>我是可 ...
- WPF MVVM 关闭View
在ViewModel中定义一个变量: private Action _closeAction; 在ViewModel的构造函数中这样定义:public MainWindowViewModel(Acti ...
- 区间dp总结
poj 1141 Brackets Sequence 基础的区间dp题,注意dp边缘的初始化,以及递归过程中的边界 poj 2955 Brackets 依旧注意初始化,水题 hdu 4745 Two ...
- hdu 1059 多重背包
题意:价值分别为1,2,3,4,5,6的物品个数分别为a[1],a[2],a[3],a[4],a[5],a[6],问能不能分成两堆价值相等的. 解法:转化成多重背包 #include<stdio ...
- Z-XML团队 软件工程课之我感我思我收获
<软件工程>这门课像我们的诤友,不断督促我们前进,又不断指引我们收获.时间飞逝,我们Z-XML团队一个个完成了课程中的所有任务,一步步走到了期末年末. 走的远了,也该回头看看.全员7人回顾 ...
- swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程
swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3 注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...
- 简单几何(直线求交点) POJ 2074 Line of Sight
题目传送门 题意:从一条马路(线段)看对面的房子(线段),问连续的能看到房子全部的最长区间 分析:自己的思路WA了:先对障碍物根据坐标排序,然后在相邻的障碍物的间隔找到区间,这样还要判断是否被其他障碍 ...
- POJ2817 WordStack(状压DP)
题目给几个字符串,可以给它们添加前导空格,然后排列,计算每一个字符串和前一个字符串相同非空格字符相等的个数,求可能的最大个数. 状态DP: d[S][i][j]表示已经用的字符串集合S且排列的最后一个 ...
- POJ 2955 (区间DP)
题目链接: http://poj.org/problem?id=2955 题目大意:括号匹配.对称的括号匹配数量+2.问最大匹配数. 解题思路: 看起来像个区间问题. DP边界:无.区间间隔为0时,默 ...