memcached

11211端口

memcache:简单来说就是一个键值存储的服务器,能够存储众多的键值对

根据键名来查找内容,所以键名不能相同。(URL作为键,页面内容作为值)

tcp是长连接,每次从缓存中获取数据都需要三次握手,很浪费时间,所以也支持UDP,但是无论是TCP还是UDP都要通过IP报文发送,所以Mencache服务端一定会监听在某个套接字上。

http使用文本类型传输数据,FTP使用文本类型或者二进制类型传输数据

memcache早期使用文本类型传输数据,但是现在两种都支持。

XML:集群的大多数配置文件格式,任何一个协议如果支持xml来传输数据的话,那么客户端和服务器端都要有一个XML引擎。就是服务器复杂起来,但是MEMcache存在就是为了高性能,所以越简单越好,所以不会使用xml来传输数据。

memcached:是一个缓存服务器,但本身无法决定缓存任何数据。一般依赖客户端,一半依赖与服务器端,存储是由服务端存储的,而至于怎么存储,存储谁是由客户端决定的。所以一个应用程序在开发的时候,压根就不会用memcached,那么它能不能往memcached中缓存数据???不能,因为能否缓存数据取决于应用程序自身。

服务端只负责存储,提供检索能力,提供了怎么去检索,但是至于怎么存,存多长时间,什么时候过期,memcached服务不管,客户端在设定一个缓存的时候,客户端提供它的键是什么,还有缓存时长,还有标志位,还有值。

memcached服务是基于lazy模型的:只要当前系统上只要有足够的空间可以用,就不会清理**(无论过没过期)但是数据失效了,也就是查不出来了,但是数据并没有被清理**,以及基于LRU算法**(最近最少使用)**的清理机制。

memcached仅仅是一个不通信分布式内存缓存服务器,并不保证数据的持久存储,假设memcached服务器坏了,只影响业务(速度)之外,是不影响数据本身的。

memcached尽可能使用内存来缓存数据,所以是一个内存缓存服务器。memcache存储数据的基本上限和下限,最小48Byte、最大1M,但是数据大小可能不同,memcached怎么在内存中管理这些数据呢?

在Linux内核当中,使用了两种方式来管理内存的碎片机制的:

1、budd system:伙伴系统(避免内存外碎片(页面之间的碎片))

一个进程需要四个页面(一个页面默认是4K),另外一个进程需要8个页面,4个页面的执行完了,但是另一个进程需要10个页面,就没有多余的页面给分配,就有4个页面的页面碎片。budd system就可以相邻的页面碎片连在一块。

2、slab allocator:slab分配器(避免内存内碎片)

但是有些文件(比如文件的Innod需要大概128个字节)用不了一个页面,那怎么般?那就事先把4K的页面实现划分成N个128字节的块,需要了直接拿来存储,用完了就放在那空着。不同数据结构的数据需要划分不同的页面来进行存储。

**现在的memcached支持使用增长因子来定义增长的幅度,每一类页面我们成为slab class,每一类页面中的块成为slab chunk。**一旦存满了,就该清理了,首先清理过期的,然后在使用LRU算法进行清理。

memcached怎么存储和查找数据:

1、首先使用除法,用键除以服务器总数,就是存取该数据的服务器号(从0开始),弊端太大。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0oZf3Hc-1580300222246)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20191101200147611.png)]

2、一致性哈希算法:

找一个环,上面有N个点位,彼此之间挨着,但是是离散的(10324)范围是从0~232,你有几个服务器,就对应的放在换上的某个点上,缓存数据的时候,使用它的键除以232取余,分散在环上的任意一个点上,按照顺时针存储在最近的服务器。万一一个服务器挂了,只影响一点点范围的数据。

在这里插入图片描述

memcache的工作:

1、要在内存中缓存

2、内存要使用slab alloactor将一个页面分配成许多不同的块(slab chunk),每个chunk是用来存储一类数据的。

memcache只适合存储键值数据,而且只是个缓存,不是存储,她是一个cache,不是一个store,Mysql是store,

使用memcache的一些企业:LiveJournal(他自己工作的公司),Wikipedia(全球最大的维基站点),Twitter(推特)Youtube,Mixi(日本最大的社交站点)。

memcached本身是事件驱动的,在客户端连接的时候,也使用事件驱动(event-driven),而他利用的是libevent的库,libevent能够提供event-driven相关功能的库叫做libevent库。

所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作. 事件驱动的核心自然是事件。

在这里插入图片描述

make && makeinstall

rpm -q libevent

tar …gz

cd memcached-

./configure --prefix=安装位置 --enable=sasl(借助于sasl进行认证,事先要确保sasl的开发库要装上(sasl-devel)) --with-libevent=

提供服务脚本:

vim /etc/rc.d/init.d/memcached

memcached:

-p:tcp端口,默认为11211

-U:UDP端口,默认为11211,0为不监听UDP端口

-u:以那个用户的身份运行

-m #:以MB为单位,指定memcache可用的最大内存空间。

-l (ip_addr):指定进程监听的IP地址

-d:以服务模式运行

-c:支持最大的并发连接数,默认为1024

-f #:设定slab Allocator定义预先设定分配内存空间大小固定的块时使用的增长因子。

-n:指定最小的slab chunk大小:单位是字节

-S:启用sasl进行用户认证

在这里插入图片描述

然后使用-d放在后台运行

使用telnet localhost 11211进行连接memcached

在这里插入图片描述

使用add添加键值,使用get获取键值。

使用客户端来将数据缓存至memcached:

perl:调用cache::memcached模块

PHP:有两个可扩展库:memcache、memcached(一般用这个)

C/C++:调用libmemecached模块(可以提供类似于mysqladmin的客户端工具)

使用客户端来将数据缓存至memcached:

perl:调用cache::memcached模块

PHP:有两个可扩展库:memcache、memcached(一般用这个)

C/C++:调用libmemecached模块(可以提供类似于mysqladmin的客户端工具)

memadmin:图形化方式来管理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
讲述memcached 安装使用等 目录: 第一章:memcached 介绍....................................................................................................................1 1.1 memcached 是什么?.............................................................................................................1 1.2 什么是 NoSQL?...................................................................................................................1 1.3 谁在用 memcached?............................................................................................................1 第二章:memcached 基本使用............................................................................................................2 2.1 linux 下编译 memcached..................................................................................................... 2 2.1.1:准备编译环境............................................................................................................2 2.1.2: 编译 memcached..................................................................................................... 2 2.2 memcached 的启动...............................................................................................................3 2.3 memcached 的连接...............................................................................................................5 2.4 memcached 的命令...............................................................................................................5 第三章 memcached 的内存管理与删除机制.................................................................................. 9 3.1:内存的碎片化.......................................................................................................................9 3.2: slab allocator 缓解内存碎片化........................................................................................... 9 3.3 系统如何选择合适的 chunk?............................................................................................. 9 3.4 固定大小 chunk 带来的内存浪费...................................................................

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值