哈哈哈 什么鬼的标题
基础的传送门 Memcached 教程 | 菜鸟教程 拿走不送 好好学习
自由、源码开放、高性能、分布式的内存对象缓存系统
- 最大30天过期时间 REALTIME_MAXDELTA 最大键长250字节 KEY_MAX_LENGTH
- 应对多个连接pthread 非阻塞网络IO 无阻塞的socket通信 libevent库
- 存储键值对的HashMap key默认最大不能超过128字节 value默认大小是1M
- 最大同时连接数是200 最大软连接数是1024 settings.maxconns
优点
Memcached 利用多核优势,单实例吞吐量极高,可以达到几十万 QPS(取决于 key/value 的字节大小以及服务器硬件性能,日常环境中 QPS 高峰大约在 4-6w 左右)。适用于最大程度扛量
原理
守护程序,C/S模式 单进程 单线程 异步IO 基于事件:libevent事件通知
多个server协同工作但是没有联系,只对自己的数据负责 key进行hash定位server
LRU+到期失效 自动删除不使用的缓存,获取key时查看记录时间戳 key/value是否过期
删除对象做标记,指针放入slot回收槽,下次分配直接使用
内存算法:slab allocation,分配内存分割成特定大小内存块 尺寸相同的内存块分成组
动态内存分配,slab存放空闲chunk列表 【分布式缓存】一文详解 Memcached-CSDN博客
数据存放 键值大小 匹配slab大小 就近slab存放 :浪费空间 产生内存碎片 降低操作系统对内存的管理效率,注重value设计
预先统计存入数据大小,同一业务的数据存入服务器
启动指定-f 默认值 1.25 指定大小间隔
规划 slab 大小 = chunk 大小 * n 整数倍
场景
1、可以缓存 session 数据 、临时数据以减少对他们的数据库写操作
2、缓存一些很小但是被频繁访问的文件
3、经常被读取且实时性要求不强可等到自动过期的数据
4、变化频繁,查询频繁,但是不需要入库的场景读多写少的场景中用于页面缓存
分布式算法:
- 余数算法,键的整数散列值,再除以服务器台数,据余数确定存取服务器,简单,高效,在memcached服务器增加或减少时,几乎所有的缓存都会失效
- 散列算法:算出memcached服务器的散列值,将其分布到0到2^32次方的圆上,用同样的方法算出存储数据的键的散列值并映射至圆上,从数据映射到的位置开始顺时针查找,将数据保存到查找到的第一个服务器上,如超过2^32次方,找不到服务器,数据保存到第一台服务器上。如添加了一台,在圆上增加服务器的逆时针方向的第一台服务器上的键会受到影响
java实现
XMemcached 客户端基于 NIO 实现,减少线程创建和切换的开销
springBoot 集成 memcached_springboot memcached-CSDN博客