由"缓存"到"Memcached分布式缓存"

简介: <pre><span style="font-family:KaiTi_GB2312; font-size:18px"><strong>【学习背景】</strong><span style="white-space:pre"> </span>在ITOO4.0的时候,自己听了师哥师姐的技术分享,从那开始,Memcached 就留在脑海中了。现在,我们开始了ITOO4.1,在师父的指导下,开
【学习背景】
	在ITOO4.0的时候,自己听了师哥师姐的技术分享,从那开始,Memcached 就留在脑海中了。现在,我们开始了ITOO4.1,在师父的指导下,开始缓存的学习。自然地,我第一时刻想到的便是Memcached。
【学习阶梯】
	在正是进入Memcached之前,自己先了解了些关于“缓存”的知识。
	一.什么是缓存
		用来暂时存储数据,避免频繁连接数据库或磁盘文件。一般来说,缓存比数据库或磁盘容量更小,但存取速度快。
	二.缓存的作用
		存储频繁访问的数据;临时存储耗时的计算结果;内存缓存减少磁盘IO
	三.缓存的类型
		1.客户端缓存
			cookie缓存是属于一种客户端缓存,也就是将数据暂时存储在浏览器中,页面一旦关闭,这一类缓存是无法获取的,并且有的用户浏览器可能选择的不保存cookie。
		2.服务端缓存
			session缓存和Memcached分布式缓存都是属于一种服务端缓存,它们之间的区别在于session缓存用户与数据间存在绑定,就拿登录淘宝来说,用户登录后,如果将用户信息存在session中,用户有哪些浏览记录,这些数据都是根据该用户下的sessionID去得到的,从而数据和用户之间是绑定着的。而Memcached,是一种无状态的缓存,即用户和数据之间并没有绑定关系。
	有了这些基本知识的了解,下面便开始引入Memcached。
	一.Memcached的由来
	许多web应用将数据保存在关系型数据管理系统中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现负担加重、数据库响应恶化、网站显示延迟等影响。
	这时,Memcached就大显身手了。Memcached是高性能的分布式内存缓存服务器。
	二.Memcached的概述
	用于动态web应用以减轻数据库负载。通过在内存中缓存数据和对象减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。基于一个存储键/值对的hashmap。
			三.Memcached的存储原理
	Memcached的存储原理,类似于操作系统中分配内存的原理。涉及到slab,page,chunk三个概念。chunk为固定大小的内存空间,page对应实际的物理空间,同样大小的chunk是slab。采用最近最少的算法,如果某一slab的内存容量满了,那么会将这一slab中的最近的最少使用的记录删除。而要存储的数据是根据hasp算法,得到改数据应该是存储在哪个安装了Memcached的服务器地址的哪一个slab中。而删除容量也是以单个slab来说,并不是整个slab。
	四.Memcached的“分布式”理解
	分布式缓存Memcached,此"分布式"并非彼"分布式"。分布式是指不同的计算机可以访问同一服务器上的应用程序。而Memcached的分布式是指不同的数据是分布存储在不同的服务器上。假设有三台Memcached服务器,应用程序要保存“user1”,“user2”,“user3”,“user4”等数据。它是先添加“user1”,根据key值去选定保存在哪一服务器上,其它数据也同样这样一一添加。
	五.Memcached的优势与不足
	优势
		支持分布式扩展;内存可以无限制扩大;分布式使用简单,可以在客户端直接设置多个memcached服务器。
	不足
		1.数据保存在内存当中,一旦服务进程重启,数据会全部丢失
		对策:可以采取更改memcached的源代码,增加定期写入硬盘的功能。
		2.memcached以root权限运行,本身没有任何权限管理和认证功能,安全性不足。
		对策:可以将memcached服务绑定在内网IP上,通过防火墙进行防护。
	六.Memcached的安装与使用
		1.下载Memcached解压得到memcached.exe程序和pthreadGC2.dll文件
		2.在dos窗口输入命令:先转入到程序所在文件夹,然后输入命令 memcached.exe -d install 进行安装
		3.输入命令memcached.exe -d start 进行启动(默认分配内存64M,使用11211端口)
		4.输入命令Telnet 127.0.0.1 11211连接上Memcached,然后直接输入stats可以得到当前Memcached的状态。
	安装使用注意点:
		1.安装需要以管理员身份运行。
		2.memcached应用程序不要放在带有中文或特殊字符的目录下,可能无法识别,安装失败。
		3.检查是否安装成功的方法:在计算机属性中找到服务,查看是否有memcached那一项,如下图,有的话,则表示安装成功。
				4.检查memcached安装并且启动的方法:在dos窗口下输入 netstat -an,查看是否有端口为11211的地址在监听,如下图,有的话,则表示启动成功。
						5.在使用Memcached时,如果输入telnet 后报telnet不是内部或外部命令的时候,做如下操作。
			【学习实践】
	在ITOO项目中,很多系统模块都有应用到Memcached,下面就来看看它是如何应用的。
	首先,需要在配置文件中进行Memcached的配置,即选择Memcached服务器的IP地址。
		在项目中,底层封装好了一个Memcachedhelper类,其中包括添加,获取,替代,删除,序列化与反序列化等方法。在客户端,我们只需要添加引用即可。
		最后,在前台Controller中调用方法即可,示例如下图所示:
    【学习感悟】
	最近的学习,都会给师父发学习日报,一方面让师父看看自己的学习收获,一方面也可以让师父看看自己学习的理解程度,感觉这样的学习效果也是有很大的进步。
	其实,不论什么知识,没有什么懂与不懂,只是要看自己有没有真正接触到,有没有真正花时间去学习过。事实上,只要自己静下心,踏踏实实,加上交流,阅读,都可以一点点积累到的。
目录
相关文章
|
2月前
|
缓存 NoSQL Redis
Python缓存技术(Memcached、Redis)面试题解析
【4月更文挑战第18天】本文探讨了Python面试中关于Memcached和Redis的常见问题,包括两者的基础概念、特性对比、客户端使用、缓存策略及应用场景。同时,文章指出了易错点,如数据不一致和缓存淘汰策略,并提供了实战代码示例,帮助读者掌握这两款内存键值存储系统的使用和优化技巧。通过理解其核心特性和避免常见错误,可以提升在面试中的表现。
59 2
|
2月前
|
NoSQL Redis 缓存
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?
【5月更文挑战第17天】Redis常被称为单线程,但实际上其在处理命令时采用单线程,但在6.0后IO变为多线程。持久化和数据同步等任务由额外线程处理,因此严格来说Redis是多线程的。面试时需理解Redis的IO模型,如epoll和Reactor模式,以及其内存操作带来的高性能。Redis使用epoll进行高效文件描述符管理,实现高性能的网络IO。在讨论Redis与Memcached的线程模型差异时,应强调Redis的单线程模型如何通过内存操作和高效IO实现高性能。
58 7
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?
|
1月前
|
缓存 Java Spring
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
21 0
|
2月前
|
缓存 NoSQL Redis
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?--epoll调用和中断
【5月更文挑战第18天】`epoll`包含红黑树和就绪列表,用于高效管理文件描述符。关键系统调用有3个:`epoll_create()`创建epoll结构,`epoll_ctl()`添加/删除/修改文件描述符,`epoll_wait()`获取就绪文件描述符。`epoll_wait()`可设置超时时间(-1阻塞,0立即返回,正数等待指定时间)。当文件描述符满足条件(如数据到达)时,通过中断机制(如网卡或时钟中断)更新就绪列表,唤醒等待的进程。
59 6
|
2月前
|
缓存 NoSQL 中间件
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?epoll、poll和select + Reactor模式
【5月更文挑战第19天】`epoll`、`poll`和`select`是Linux下多路复用IO的三种方式。`select`需要主动调用检查文件描述符,而`epoll`能实现回调,即使不调用`epoll_wait`也能处理就绪事件。`poll`与`select`类似,但支持更多文件描述符。面试时,重点讲解`epoll`的高效性和`Reactor`模式,该模式包括一个分发器和多个处理器,用于处理连接和读写事件。Redis采用单线程模型结合`epoll`的Reactor模式,确保高性能。在Redis 6.0后引入多线程,但基本原理保持不变。
49 2
|
2月前
|
缓存 NoSQL Redis
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Redis多线程
【5月更文挑战第21天】Redis启用多线程后,主线程负责接收事件和命令执行,IO线程处理读写数据。请求处理流程中,主线程接收客户端请求,IO线程读取并解析命令,主线程执行后写回响应。业界普遍认为,除非必要,否则不建议启用多线程模式,因单线程性能已能满足多数需求。公司实际场景中,启用多线程使QPS提升约50%,或选择使用Redis Cluster以提升性能和可用性。
37 0
|
2月前
|
NoSQL Redis 数据库
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Memcache + Redis 多线程
【5月更文挑战第20天】Redis采用单线程模式以避免上下文切换和资源竞争,简化调试,且其性能瓶颈在于网络IO和内存,而非多线程。相比之下,Memcache使用多线程能更好地利用多核CPU,但伴随上下文切换和锁管理的开销。尽管Redis单线程性能不俗,6.0版本引入多线程以提升高并发下的IO处理能力。启用多线程后,Redis结合Reactor和epoll实现并发处理,提高系统性能。
52 0
|
2月前
|
缓存 监控 PHP
【PHP开发专栏】Memcached在PHP中的缓存应用
【4月更文挑战第29天】Memcached是高性能分布式内存缓存系统,常用于加速动态Web应用,减轻数据库负担。在PHP中,通过官方扩展模块与Memcached服务器交互,涉及安装扩展、创建实例、设置/获取缓存、删除缓存及其它操作。使用Memcached可减少数据库负载、缓存查询结果、实现页面缓存,支持分布式缓存,并需注意避免缓存击穿、穿透和雪崩。监控和调优缓存策略能优化性能。了解和掌握Memcached有助于提升PHP应用的效率和扩展性。
|
2月前
|
缓存 NoSQL Redis
如何在Python中使用Redis或Memcached进行缓存?
如何在Python中使用Redis或Memcached进行缓存?
59 2
|
9月前
|
存储 缓存 NoSQL
springboot快速整合Memcached缓存技术
springboot快速整合Memcached缓存技术