内存缓存
cpu对各种存储器的访问速度比较:寄存器(ns)>cache(几十ns)>内存(几百ns)>硬盘(ms)
由于硬盘是存储数据持久化的方式,所以数据最终都是存储到硬盘,但是硬盘的速度完全不能满足先如今的需求,这就需要把数据缓存到内存中提高性能
缓存系统可以认为是基于内存的数据库,相对于后端大型生产数据库而言基于内存的缓存数据库能够提供快速的数据访问操作,从而提高客户端的数据请求访问反馈,并降低后端数据库的访问压力
Memcache
memcached 是高性能的分布式内存缓存服务器,一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web 应用的速度、提高可扩展性
- 不支持数据持久化,系统重启数据丢失
- 不支持加密方式,需要结合系统防火墙和安全策略
- 数据以API获取存取,数据经过HASH以key-value的形式存放
- memcache使用了多线程机制,可以同时处理多个请求(线程数一般设置为CPU核数)
- 使用LRU(last recently used)最近最少使用算法淘汰数据
- openstack认证服务使用Memcached缓存令牌
Memcached缓存流程
- 检查客户端请求的数据是否在 Memcache 中,如果存在,直接数据返回
- 反之,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份 Memcache 中
- 每次更新数据库的同时更新 Memcache 中的数据库(确保数据信息一致性)
- 当分配给 Memcache 内存空间用完后,会使用LRU(least Recently Used ,最近最少使用 ) 替换数据
使用Slab分配算法保存数据
Memcache采用的是静态分配方式
- Slab: 它是具有相同大小的chunk集合,chunk是最终数据存储的地方
- Page: 默认大小是1M,page1满了之后,分配page2
- Chunk: 默认是96B,以后在每个slab中都是根据倍数因子向上递增(默认1.25倍)
Memcache分布式缓存集群
在一台服务器的内存容量无法满足情况下就需要集群多台来提供服务
- 服务器端并没有分布式功能,memcached 不会互相通信以共享信息
普通的hash算法
一致性hash算法
参考:https://blog.csdn.net/kongqz/article/details/6695417
配置Memcache
安装Memcache及python支持
yum -y install memcached python-memcached
配置管理IP
vi /etc/sysconfig/memcached
OPTIONS="-l 192.168.0.210"
#默认内存换成大小64M,CACHESIZE="64"
启动Memcached服务
systemctl enable memcached.service
systemctl start memcached.service
memcache运行状态
telnet 192.168.0.210 11211
stats