聊聊缓存

Posted 爪哇架构之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊缓存相关的知识,希望对你有一定的参考价值。

^_^更多干货,点击左上角,关注公号

今天聊聊memcached,聊技术先聊原理。本质是一个网络服务,基于tcp/ip协议,实现技术是socket,编写语言是c/c++。利用了网络通信库libevent,封装了epoll、kqueue网络通信模型,提供高性能高并发大量连接和并发请求的处理能力。比如事件驱动,多路复用,多线程非阻塞的IO通信能力。客户端非常简单,通过telnet IP port即可远程连接服务端,使用命令即可读写缓存数据,统计命中率,查看运行状态等信息。客户端支持多语言版本,传输的内容协议是文本行,协议简单。服务端分配内存空间,缓存数据,纯基于内存,读写速度很快,除了来回网络耗时,存取缓存速度是很快的。属于单进程多线程模式。

服务端缓存结构,会把memcached进程启动时申请的内存分割为很多slab,每个slab分割为1M大小的page,每个page包含若干缓存块chunk。缓存key,value等信息通过计算分配到chunk,如果占不满,就会有空闲,内存碎片,利用率低。

缓存过期,设置缓存时,可以设置过期时间,服务端不会主动检测缓存项是否过期,也不会主动清理数据。而是在get缓存时检查过期没,清理占用的缓存空间。如果缓存超过了启动时-m设置的最大内存大小,会采用LRU算法淘汰最近最少命中使用的缓存数据,把快过期的缓存数据优先标记清理覆盖掉。提高内存使用效率。启动时可以使用-M禁用LRU淘汰算法。

服务端之间不通信,互相独立。那分布式集群客户端做分片处理。每个memcached进程存储一部分,分片缓存数据。mod取余不利于增加节点后命中率,采用一致性hash算法降低了扩缩节点后的缓存丢失率。

部署篇,分为Linux 版和Windows版,部署模式又分为单机单进程,单机多进程;部署宿主机分为物理机,虚拟机和容器;部署规模分为单节点部署和分布式集群部署。Linux部署先安装libevent组件,再下载源码编译安装memcached,请采用脚本启动进程。使用telnet客户端测试存取缓存等命令。

监控,运维篇:telnet后命令查看;进程监控及报警和重启;图形化监控php文件;zabbix监控memcached。

下一篇讲解memcached的高可用magent方案、replicated复制方案、codis/twemproxy代理集群方案。客户端高可用改造,memcached原子命令原理,分布式锁,分布式接口限次限流,分布式计数器,数据缓存等应用。多级缓存客户端,缓存常见3大问题及解决方案。扩展到全网络缓存,各种缓存技术,原理,cdn等,各种缓存组件和产品。

^_^关注我吧

以上是关于聊聊缓存的主要内容,如果未能解决你的问题,请参考以下文章

聊聊缓存

聊聊 MyBatis 缓存

聊聊MyBatis缓存机制

聊聊MyBatis缓存机制

聊聊 CDN 缓存与浏览器缓存

聊聊db和缓存一致性的5种实现方式