01 . Memcached简介及部署
Memcached简介
memcached是一个自由开源,高性能,分布式内存对象存储系统
基于内存的key-valued存储,用来存储小块的任意数据(字符串,对象)
他是一个简洁的key-value存储系统
# 分为服务器和客户端两部分
# 1. 服务端: memcached
# 2. 客户端: memcache
使用目的: 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度,提高可扩展性
Memcached特点
# 1. C/S模式架构: 由C语言编写,总共2000多行代码。
# 协议简单: 使用的是基于文本行的协议,能通过telnet/nc直接操作Memcached服务存取数据.
# 2. 支持epoll/queue异步I/O模型: 使用libevent作为事件处理通知机制.
# 3. Key/Value键值对数据类型
# 4. 纯内存缓存,效率高
# 5. 支持分布式集群
# 6. 多进程
Memcached应用
完整缓存
# 例如:京东的商品分类,就可以事先放在Memcached里,然后在对外提供数据访问,这个被称之为“数据预热”
热点缓存
# 热点缓存一般是用于由用户更新的商品,例如淘宝的卖家,当卖家新增商品后,淘宝网的程序就会把商品写入数据库,然后读取写入的数据,把这部分数据,放入 Memcached中,下一次访问这个商品的请求直接从Memcached中取走了。
作为集群节点的session会话共享机制
Memcached原理
Memcached数据存储机制
# 需要被缓存的数据以key/value键值对的形式保存在服务器端预分配的内存区中,每个被缓存的数据都有唯一的标识key,操作Memcached中的数据就是通过这个唯一标识的key进行的。
Memcached内存管理机制
# Memcached采用了如下机制:
# 1. 采用slab内存分配机制
# 2. 采用LRU对象清除机制
# 3. 采用hash机制快速检索item
memcached是利用Slab Allocation机制来分配和管理内存的,提前将
大内存分配大小为1MB的若干个slab,然后针对每个slab再进行小对象填充,这个小对象称为chunk,避免大量重复的初始化和清理,减轻了内存管理器的负担。
Slab Allocation内存分配的原理是按照预先规定的大小,将分配给Memcached服务的内存预先分割成特定长度的内存块(chunk),再把尺寸相同的内存块(chunk)分成组(chunks slab class),这些内存块不会释放,可以重复利用
# 小结
# 1. Memcached早期内存管理机制为malloc(动态内存分配)
# 2. lab内存分配机制可以解决内存碎片的问题
# 3. Memcached服务的内存预先分割成特定长度的内存块,称为chunk,用于缓存数据的内存空间或内存块,相当于磁盘的block,只不过磁盘的每一个block都是相等的,而chunk只有在同一个Slab Class内才是相等的。
# 4. Slab Class指特定大小(1MB)的包含多个chunk的集合或组,一个Memcached包含多个Slab Class,每个Slab Class包含多个相同大小的chunk。
# 5. Slab机制缺点: 例如,Chunk空间会有浪费(通过调优因子以及大小接近的数据放入一个MC实例)
Memcached过期机制
# 不主动检测item对象是否过期,而是在get时才会检查item对象是否过期以及是否应该删除。
# 当删除item对象时,一般不释放内存空间,而是做删除标记,将指针放入slot回收插槽,下次分配的时候可以直接使用。
# 当内存空间满的时候,将会根据LRU算法把最近最少使用的item对象删除。
# 数据存入可以设定过期时间,但是数据过期后不会被立即删除,而是在get时检查item对象是否过期以及是否应该删除。
# 如果不希望系统使用LRU算法清除数据,可以用使用-M参数。
Memcached部署
结构规划
# 用户名 memcached
# 用户组 memcached
# 端口 11211
# 源码包
/root/memcached-1.5.9.tar.gz
# 解压后源码
/root/memcached-1.5.9
# 编译目录
/root/
# 安装目录
/usr/local/memcached
# 工作目录
/var/sites/memcached
初始化系统环境
[root@memcached-1 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@memcached-1 ~]# uname -r
3.10.0-514.el7.x86_64
下载Memcached依赖
# 安装libevent依赖和gcc编译工具
yum -y install libevent libevent-devel gcc
添加用户和组
groupadd memcached;
useradd -s /sbin/nologin -d /dev/null -M -g memcached memcached;
下载Memcached包并编译安装
wget -O ./memcached-1.5.9.tar.gz http://www.memcached.org/files/memcached-1.5.9.tar.gz
tar xvf memcached-1.5.9.tar.gz
cd memcached-1.5.9
./configure --prefix=/usr/local/memcached --prefix=/usr/local/memcahced/
make && make install
修改配置文件
mkdir -p /var/sites/memcached-1.5.9/etc/
cp /root/memcached-1.5.9/scripts/memcached.sysconfig /var/sites/memcached-1.5.9/memcached
cat /var/sites/memcached-1.5.9/memcached |sed -e "s/#.*/ /g" |uniq |awk '{if (length !=0) print $0}'
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
PORT="11211"
启动Memcached
/usr/local/memcahced/bin/memcached -m 16m -p 11211 -d -u memcached -c 8192
# 验证启动结果
[root@localhost memcahced]# ps -ef |grep memcached |grep -v grep
memcach+ 10363 1 0 07:48 ? 00:00:00 ./bin/memcached -m 16m -p 11211 -d -u memcached -c 8192
# 启动多实例Memcached
/usr/local/memcahced/bin/memcached -m 16m -p 11212 -d -u memcached -c 8192
# 启动多实例Memcached指定PID文件
memcached -m 16m -p 11211 -d -u root -c 8192 -P /var/run/11211.pid
# 此时我们可以通过kill 命令指定pid文件关闭Memcached
kill `cat /var/run/11211.pid`
# 加入开机自启动
# 把上述两个实例的启动命令放入/etc/rc.local,以便下次开机可以自启动。
tail -2 /etc/rc.local
memcached -m 16m -p 11211 -d -u root -c 8192
memcached -m 16m -p 11212 -d -u root -c 8192
# 关闭可以用killall ,pkill
Memcached启动命令
#进程与连接设置:
-d 以守护进程(daemon)方式运行服务
-u 指定运行Memcached的用户,如果当前用户为root,需要使用此参数指定用户
-l 指定Memcached进程监听的服务器IP地址,可以不设置此参数
-p(小写)指定Memcached服务监听TCP端口号。默认为11211
-P(大写)设置保存Memcached的pid文件($$),保存PID到指定文件
#内存相关设置:
-m 指定Memcached服务可以缓存数据的最大内存,默认为64MB
-M Memcached服务内存不够时禁止LRU,如果内存满了会报错
-n 为key+value——flags分配的最小内存空间,默认为48字节
-f chunk size增长因子,默认为1.25
-L 启用大内存页,可以降低内存浪费,改进性能
#并发连接设置:
-c 最大的并发连接数,默认是1024
-t 线程数,默认4.由于Memcached采用的是NIO,所以太多线程作用不大
-R 每个event最大请求数,默认是20
-C 禁用CAS(可以禁止版本计数,减少开销)
#测试参数:
-v 打印较少的errors/warnings
-vv 打印非常多调试信息和错误输出到控制台
-vvv 打印极多的调试信息和错误输出,也打印内部状态转变
#其他选项可通过在命令行输入“memcached -h”命令来显示
Memcached基本操作
向Memcached中添加数据时,注意添加的数据一般为键值对的形式,例如: key1->values1, key2->values2
安装工具
yum -y install nc telnet
printf配合nc向Memcached写入数据
# 向memcached写入数据
printf "set key1 0 0 5\r\nzhou\r\n" nc 127.0.0.1 11211
# replace 更新数据
printf "replace key1 0 0 7\r\nxmh\r\n" | nc 127.0.0.1 11211
# 配合printf配置nc从Memcached中读取数据
printf "get key1\r\n" | nc 127.0.0.1 11211
# 通过printf配合nc从Memcached中删除数据
printf "delete key1\r\n" | nc 127.0.0.1 11211
telnet命令写入数据
telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set user01 0 0 7 #写入数据,创建key,长度等
jason12 #数据长度要和value一致
STORED
get user01 #浏览数据
VALUE user01 0 7
jason12
END
delete user01 #删除数据,删除的是key
DELETED
get user01 #再次浏览数据,数据被删除
END
quit #quit退出
Connection closed by foreign host.
Memcached命令解释
# 1. set 设置数据
# 2. get 获取数据
# 3. delete 删除数据
# 4. replace 更新数据
# 操作Memcached 相关命令语法
set key1 0 0 6 \r\n benet \r\n
<command name><key><flags><exptime><bytes><datablock><string><datablock>
command # 命令参数(set、get、delete、replace)
key # key 用于查找缓存值,要求小于250字符,不包含空格和控制字段
flags # 用户端用来表示数据格式数值,如json、xml、压缩等
exptime # 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes # 在缓存中存储的字节数
datablock # 文本行,以\r\n结尾
string # 键值对应的缓存内容
memcached-tool
源码包内置了一个 perl 写的
scripts/memcached-tool管理脚本,可以用来查看 Memcached 的运行状态。
注:这个脚本并不会自动安装到安装目录中,因此要使用的话要手动复制过去
cd /root/memcached-1.5.9
cp /root/memcached-1.5.9/scripts/memcached-tool /usr/local/memcahced/bin/
01 . Memcached简介及部署的更多相关文章
- 01 . Redis简介及部署主从复制
简介 Remote Dictionary Server, 翻译为远程字典服务, Redis是一个完全开源的基于Key-Value的NoSQL存储系统,他是一个使用ANSIC语言编写的,遵守BSD协议, ...
- 01 . Mysql简介及部署
Mysql数据库简介 什么是数据? 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材,数据是信息的表现形式和载体,可以是符号,文字,数字,语音,图 ...
- 01 . RabbitMQ简介及部署
RabbitMQ简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它 ...
- 01 . Tomcat简介及部署
Tomcat简介 Tomcat背景 tomcat就是常用的的中间件之一,tomcat本身是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中.而tomcat本 ...
- 01 . Nginx简介及部署
Nginx简介 Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存.该软件由 Igor Sysoev 创建,并于2004年首次公开 ...
- 01 . MongoDB简介及部署配置
简介 什么是MongoDB? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用 ...
- Memcached简介
在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...
- 01 HDFS 简介
01.HDFS简介 大纲: hadoop2 介绍 HDFS概述 HDFS读写流程 hadoop2介绍 框架的核心设计是HDFS(存储),mapReduce(分布式计算),YARN(资源管理),为海量的 ...
- 深入详解美团点评CAT跨语言服务监控(一) CAT简介与部署
前言: CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring.MyBatis.Dubbo 等框架以及Log4j 等结合,支持P ...
随机推荐
- Mysql数据库多表联查
内连接:查询的是多个表的交集 外连接:查询的是一张表的全部数据和另一张表满足要求的数据 student数据库表 grade数据库表 内连接: 隐式内连接 SELECT s.id, s. NAME, s ...
- 博客第一天:常用的DOS命令
打开CMD的方式: 1.开始+系统+命令提示符 2.Win键+R 输入cmd打开控制台[推荐使用] 3.在任意文件夹下,按住Shift键+鼠标右击, 选择 ”在此处打开Powershell窗口(S)“ ...
- Spring源码阅读 之 搭建源码阅读环境(IDEA)
检出源码: GitHub:https://github.com/spring-projects/spring-framework.git 可以按如下步骤:(须确保Git已正确安装) Git正确安装后, ...
- Spring Cloud 学习 之 Spring Cloud Eureka(概述)
Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 前述: 服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务 ...
- 带你看看Java的锁(三)-CountDownLatch和CyclicBarrier
带你看看Java中的锁CountDownLatch和CyclicBarrier 前言 基本介绍 使用和区别 核心源码分析 总结 前言 Java JUC包中的文章已经写了好几篇了,首先我花了5篇文章从源 ...
- docker磁盘空间不足解决办法
docker磁盘空间不足解决办法 导入docker镜像时,错误提示:磁盘空间不足. 1.查看docker镜像存放目录空间大小 du -hs /var/lib/docker/ 2.停止docker服务. ...
- 设计模式之GOF23代理模式02
静态代理 模拟经纪人与明星开演唱会 public interface Star { /** * 面谈 */ void confer(); /** * 签合同 */ void sign ...
- SpringBatch异常To use the default BatchConfigurer the context must contain no more thanone DataSource
SpringBoot整合SpringBatch项目,已将代码开源至github,访问地址:https://github.com/cmlbeliever/SpringBatch 欢迎star or fo ...
- java -> equals方法与toString方法
equals方法 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较.Object类中的equals方法内部使用的就是==比较运算符(比较内存地址). 在开发中要比较两 ...
- 【数据结构】平衡树splay和fhq—treap
1.BST二叉搜索树 顾名思义,它是一棵二叉树. 它满足一个性质:每一个节点的权值大于它的左儿子,小于它的右儿子. 当然不只上面那两种树的结构. 那么根据性质,可以得到该节点左子树里的所有值都比它小, ...