上海做网站比较有名的公司有哪些,网站构建的一般流程是什么,临夏州住房和城乡建设厅网站,海南自贸区一 Memcached 介绍
#xff08;一#xff09;Memcached 简单介绍
弊端 不能持久化 #xff08;不支持存在硬盘里#xff09;
Memcached 只支持能序列化的数据类型#xff0c;不支持持久化#xff0c;基于Key-Value的内存缓存系统
memcached 虽然没有像redis所具备的…一 Memcached 介绍
一Memcached 简单介绍
弊端 不能持久化 不支持存在硬盘里
Memcached 只支持能序列化的数据类型不支持持久化基于Key-Value的内存缓存系统
memcached 虽然没有像redis所具备的数据持久化功能比如RDB和AOF都没有但是可以通过做集群同步的方式让各memcached服务器的数据进行同步从而实现数据的一致性即保证各memcached的数据是一样的即使有任何一台 memcached 发生故障只要集群中有一台 memcached 可用就不会出现数据丢失当其他memcached 重新加入到集群的时候,可以自动从有数据的memcached 当中自动获取数据并提供服务
Memcached 借助了操作系统的 libevent 工具做高效的读写。libevent是个程序库它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加也能发挥高性能。memcached使用这个libevent库因此能在Linux、BSD、Solaris等操作系统上发挥其高性能
Memcached 支持最大的内存存储对象为1M超过1M的数据可以使用客户端压缩或拆分报包放到多个key中比较大的数据在进行读取的时候需要消耗的时间比较长memcached 最适合保存用户的session实现session共享
Memcached存储数据时, Memcached会去申请1MB的内存, 把该块内存称为一个slab, 也称为一个page
Memcached 支持多种开发语言包括JAVA,C,Python,PHP,C#,Ruby,Perl等
Memcached 官网memcached - a distributed memory object caching system 二Memcached 和 Redis 比较 比较类别Redismemcached支持的数据结构哈希、列表、集合、有序集合纯kev-value持久化支持有无高可用支持redis支持集群功能可以实现主动复制读写分离官方也提供了sentinel集群管理工具能够实现主从服务监控故障自动转移这一切对于客户端都是透明的无需程序改动也无需人工介入需要二次开发存储value容量最大512M最大1M内存分配临时申请空间可能导致碎片预分配内存池的方式管理内存能够省去内存分配时间虚拟内存使用有自己的VM机制理论上能够存储比物理内存更多的数据当数据超量时会引发swap把冷数据刷到磁盘上所有的数据存储在物理内存里网络类型非阻塞IO复用模型,提供一些非KV存储之外的排序聚合功能在执行这些功能时复杂的CPU计算会阻塞整个IO调度非阻塞IO复用模型水平扩展支持redis cluster 可以横向扩展暂无多线程Redis6.0之前是只支持单线程Memcached支持多线程,CPU利用方面Memcache优于redis单机QPS约10W约60W源代码可读性代码清爽简洁可能是考虑了太多的扩展性多系统的兼容性代码不清爽适用场景复杂数据结构、有持久化、高可用需求、value存储内容较大纯KV数据量非常大并发量非常大的业务 三 生产环境架构 memcached 速度快 放在前面 提升用户体验 二 Memcached 工作机制
一内存分配机制
应用程序运行需要使用内存存储数据但对于一个缓存系统来说申请内存、释放内存将十分频繁非常容易导致大量内存碎片最后导致无连续可用内存可用。
Memcached采用了Slab Allocator机制来分配、管理内存。 Page分配给Slab的内存空间默认为1MB分配后就得到一个Slab。Slab分配之后内存按照固定字节大小等分成chunk。 Chunk用于缓存记录k/v值的内存空间。Memcached会根据数据大小选择存到哪一个chunk中假设chunk有128bytes、64bytes等多种数据只有100bytes存储在128bytes中存在少许浪费。 Chunk最大就是Page的大小即一个Page中就一个Chunk Slab ClassSlab按照Chunk的大小分组就组成不同的Slab Class, 第一个Chunk大小为 96B的Slab为Class1,Chunk 120B为Class 2,如果有100bytes要存那么Memcached会选择下图中Slab Class 2 存储因为它是120bytes的Chunk。Slab之间的差异可以使用Growth Factor 控制默认1.25。
自己的话理解就是
划分若干个部分 以96kb为第一个盒子 第二个盒子乘以1.25
96kb 120kb 150kb 以此类推 最大盒子1024kb
把数据按照大小 放对应的盒子 二懒过期 Lazy Expiration
memcached不会监视数据是否过期而是在取数据时才看是否过期如果过期,把数据有效期限标识为0并不清除该数据。以后可以覆盖该位置存储其它数据。 三LRU 最近最少使用算法
当内存不足时memcached会使用LRULeast Recently Used机制来查找可用空间分配给新记录使用
自己的话理解就是 : 像内存一样 一直使用的数据放在最上面 不用的会被替换掉 四集群
Memcached集群称为基于**客户端**的分布式集群即由客户端实现集群功能即Memcached本身不支持集群
Memcached集群内部并不互相通信一切都需要客户端连接到Memcached服务器后自行组织这些节点并决定数据存储的节点。 三 安装 memcached
一 yum 安装
1 yum 安装 2找到配置文件 3编辑配置文件
配置文件不用改动
[rootlocalhost ~]#vim /etc/sysconfig/memcached
PORT11211 #监听端口
USERmemcached #启动用户
MAXCONN1024 #最大连接数
CACHESIZE64 #最大使用内存
OPTIONS #其他选项 二 编译安装
1 安装 依赖环境 2从官网下载 压缩包 3解压缩 并去到解压后的文件 4指明安装目录 5安装 6做软连接方便补全 7生成程序用户 8 写配置文件 cat /etc/sysconfig/memcached eof
PORT11211
USERmemcached
MAXCONN1024
CACHESIZE64
OPTIONS
eof
9 写service 文件 cat /lib/systemd/system/memcached.service eof
[Unit]
Descriptionmemcached daemon
Beforehttpd.service
Afternetwork.target
[Service]
EnvironmentFile/etc/sysconfig/memcached
ExecStart/apps/memcached/bin/memcached -p \${PORT} -u \${USER} -m \${CACHESIZE} -c \${MAXCONN} \$OPTIONS
[Install]
WantedBymulti-user.target
eof
10 启动 memcached 数据库 四 memcached 常见选项 -u username memcached运行的用户身份必须普通用户 -p 绑定的端口默认11211 -m num 最大内存单位MB默认64MB -c num 最大连接数缺省1024 -d 守护进程方式运行 -f 增长因子Growth Factor默认1.25 -v 详细信息-vv能看到详细信息 -M 使用内存直到耗尽不许LRU -U 设置UDP监听端口0表示禁用UDP #默认前台执行
[rootcentos7 ~]#memcached -u memcached -m 1024 -c 65536 -f 2 -vv #以后台方式执行
[rootcentos7 ~]#memcached -u memcached -m 1024 -c 65536 -d 五 memcached 开发库和工具 --help 查看选项 一 memping 检测连接服务器
检测数据库是否存在 二memstat
查看数据库状态 六 memcached 内部操作
一增删改数据 set 修改数据 add 添加数据 get 调用数据 delete 删除数据 此处class 可以理解为变量 ky35 为变量值 二查数据
stats #显示服务状态
stats items
#显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。 stats slabs
#用于显示各个slab的信息包括chunk的大小、数目、使用情况等 七 memcached集群部署架构
一架构图
magent已经有很长时间没有更新因此可以不再使用magent直接通过负载均衡连接到memcached仍然有两台memcached做高可用repcached版本的memcached之间会自动同步数据以保持数据一致性即使其中的一台memcached故障也不影响业务正常运行故障的memcached修复上线后再自动从另外一台同步数据即可保持数据一致性。 二 主从复制 高可用
注意! memcached 只能用 1.28版本 另一台下二阶软件 repcached1.28版本
两台机器做数据库高可用
1 实验环境
77装memcached 99装repcached 做数据库高可用
2 实验步骤
99机器
[rootcentos7 ~]# yum -y install gcc libevent libevent-devel
[rootcentos7 ~]# wget https://jaist.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz
[rootcentos7 ~]# tar xf memcached-1.2.8-repcached-2.2.1.tar.gz
[rootcentos7 ~]# cd memcached-1.2.8-repcached-2.2.1
[rootcentos7 memcached-1.2.8-repcached-2.2.1]# ./configure --prefix/apps/repcached --enable-replication
[rootcentos7 memcached-1.2.8-repcached-2.2.1]# make #报错如下
1安装编译环境 2下载安装包 解压 3 ./configure 指明安装目录 添加replicaton 模块 4make 会报错 5解决办法
[rootcentos7 memcached-1.2.8-repcached-2.2.1]# vim memcached.c
56 #ifndef IOV_MAX
57 #if defined(__FreeBSD__) || defined(__APPLE__)
58 # define IOV_MAX 1024
59 #endif
60 #endif#改为如下内容即删除原有的原第5759行
56 #ifndef IOV_MAX
57 # define IOV_MAX 1024
58 #endif
vim memcached.c 删除原有的原第5759行 6, make make install 不会报错
7做软连接 8创建程序用户 9 后台启动 -d 后台 -x 和谁同步 10 ss -ntl 查看是否启动
l指 -l, --listening display listening sockets 11把 /apps 的内容同步 到77机器 77机器
1 tree 看到内容 已被同步过来 2创建用户 3做软连接 4 安装库否则起不来 5 与99机器同步 后台启动 6 ss -ntl 查看是否启动 3 实验结果
在99 机器的数据库上加niubi 在77 机器上也能调用 三haproxy 做memcached 数据库 反向代理
1实验环境
77 99 做数据库真实服务器 66 装haproxy做代理服务器
2 实验步骤
66机器
1 安装haproxy 2 vim /etc/haproxy/haproxy.cfg 写配置文件 3重启 连接66机器的 11211 端口 4我们通过66代理服务器 也能得到数据库真实服务器的内容