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

简介:
【学习背景】
	在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中调用方法即可,示例如下图所示:
    【学习感悟】
	最近的学习,都会给师父发学习日报,一方面让师父看看自己的学习收获,一方面也可以让师父看看自己学习的理解程度,感觉这样的学习效果也是有很大的进步。
	其实,不论什么知识,没有什么懂与不懂,只是要看自己有没有真正接触到,有没有真正花时间去学习过。事实上,只要自己静下心,踏踏实实,加上交流,阅读,都可以一点点积累到的。
目录
相关文章
|
4月前
|
缓存 NoSQL Redis
Python缓存技术(Memcached、Redis)面试题解析
【4月更文挑战第18天】本文探讨了Python面试中关于Memcached和Redis的常见问题,包括两者的基础概念、特性对比、客户端使用、缓存策略及应用场景。同时,文章指出了易错点,如数据不一致和缓存淘汰策略,并提供了实战代码示例,帮助读者掌握这两款内存键值存储系统的使用和优化技巧。通过理解其核心特性和避免常见错误,可以提升在面试中的表现。
71 2
|
24天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
24天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
这篇文章介绍了如何在SpringBoot项目中整合Redis,并探讨了缓存穿透、缓存雪崩和缓存击穿的问题以及解决方法。文章还提供了解决缓存击穿问题的加锁示例代码,包括存在问题和问题解决后的版本,并指出了本地锁在分布式情况下的局限性,引出了分布式锁的概念。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
|
2月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
17天前
|
存储 缓存 关系型数据库
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
27 0
|
19天前
|
缓存 关系型数据库 MySQL
【缓存大对决】Memcached VS MySQL查询缓存,谁才是真正的性能之王?
【8月更文挑战第24天】在现代Web应用中,缓存技术对于提升性能与响应速度至关重要。本文对比分析了Memcached与MySQL查询缓存这两种常用方案。Memcached是一款高性能分布式内存对象缓存系统,支持跨服务器共享缓存,具备灵活性与容错性,但受限于内存大小且不支持数据持久化。MySQL查询缓存内置在MySQL服务器中,简化了缓存管理,特别适用于重复查询,但功能较为单一且扩展性有限。两者各有所长,实际应用中可根据需求单独或结合使用,实现最佳性能优化。
42 0
|
2月前
|
存储 缓存 算法
深入了解Memcached:缓存技术的利器
Memcached是一个开源的高性能分布式内存缓存系统,用于加速动态Web应用。它通过将数据库查询结果、API调用结果或其他数据缓存到内存中,减少对数据库的访问频率,从而提高应用的响应速度。本文详细介绍了Memcached的基本原理、架构、安装配置、使用方法、测试方法以及应用场景。通过Memcached,开发者可以有效提升Web应用的性能,减少数据库负载,改善用户体验。
36 5
|
2月前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
2月前
|
存储 缓存 数据库
分布式篇问题之全量缓存解决数据库和缓存的一致性问题如何解决
分布式篇问题之全量缓存解决数据库和缓存的一致性问题如何解决
|
4月前
|
NoSQL Redis 缓存
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?
【5月更文挑战第17天】Redis常被称为单线程,但实际上其在处理命令时采用单线程,但在6.0后IO变为多线程。持久化和数据同步等任务由额外线程处理,因此严格来说Redis是多线程的。面试时需理解Redis的IO模型,如epoll和Reactor模式,以及其内存操作带来的高性能。Redis使用epoll进行高效文件描述符管理,实现高性能的网络IO。在讨论Redis与Memcached的线程模型差异时,应强调Redis的单线程模型如何通过内存操作和高效IO实现高性能。
69 7
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?