由"缓存"到"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中调用方法即可,示例如下图所示:
    【学习感悟】
	最近的学习,都会给师父发学习日报,一方面让师父看看自己的学习收获,一方面也可以让师父看看自己学习的理解程度,感觉这样的学习效果也是有很大的进步。
	其实,不论什么知识,没有什么懂与不懂,只是要看自己有没有真正接触到,有没有真正花时间去学习过。事实上,只要自己静下心,踏踏实实,加上交流,阅读,都可以一点点积累到的。
目录
相关文章
|
14天前
|
缓存 NoSQL Redis
Python缓存技术(Memcached、Redis)面试题解析
【4月更文挑战第18天】本文探讨了Python面试中关于Memcached和Redis的常见问题,包括两者的基础概念、特性对比、客户端使用、缓存策略及应用场景。同时,文章指出了易错点,如数据不一致和缓存淘汰策略,并提供了实战代码示例,帮助读者掌握这两款内存键值存储系统的使用和优化技巧。通过理解其核心特性和避免常见错误,可以提升在面试中的表现。
20 2
|
4月前
|
缓存 算法 NoSQL
【分布式详解】一致性算法、全局唯一ID、分布式锁、分布式事务、 分布式缓存、分布式任务、分布式会话
分布式系统通过副本控制协议,使得从系统外部读取系统内部各个副本的数据在一定的约束条件下相同,称之为副本一致性(consistency)。副本一致性是针对分布式系统而言的,不是针对某一个副本而言。强一致性(strong consistency):任何时刻任何用户或节点都可以读到最近一次成功更新的副本数据。强一致性是程度最高的一致性要求,也是实践中最难以实现的一致性。单调一致性(monotonic consistency):任何时刻,任何用户一旦读到某个数据在某次更新后的值,这个用户不会再读到比这个值更旧的值。
409 0
|
6天前
|
缓存 监控 PHP
【PHP开发专栏】Memcached在PHP中的缓存应用
【4月更文挑战第29天】Memcached是高性能分布式内存缓存系统,常用于加速动态Web应用,减轻数据库负担。在PHP中,通过官方扩展模块与Memcached服务器交互,涉及安装扩展、创建实例、设置/获取缓存、删除缓存及其它操作。使用Memcached可减少数据库负载、缓存查询结果、实现页面缓存,支持分布式缓存,并需注意避免缓存击穿、穿透和雪崩。监控和调优缓存策略能优化性能。了解和掌握Memcached有助于提升PHP应用的效率和扩展性。
|
21天前
|
存储 缓存 NoSQL
缓存、分布式缓存和持久化
这篇内容介绍了缓存的概念和Redis的作用,以口袋与公文包的比喻解释了缓存如何提高数据访问速度。Redis是一个内存中的高级缓存系统,能提升系统响应速度。接着讨论了为何需要分布式缓存,通过多个“篮子”(Redis节点)解决单点故障和性能瓶颈,保证高可用性和数据安全性。最后提到了Redis的两种持久化机制——RDB(定期数据快照)和AOF(记录写操作日志),分别用照片备份和实时同步来比喻,说明它们在数据丢失风险和恢复速度上的权衡。
|
27天前
|
缓存 NoSQL 数据库
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
30 0
|
6月前
|
缓存 NoSQL 安全
分布式系列教程(05) -分布式Redis缓存 (持久化)
分布式系列教程(05) -分布式Redis缓存 (持久化)
109 0
|
2月前
|
存储 缓存
本地缓存和分布式缓存区别
【2月更文挑战第16天】
41 2
本地缓存和分布式缓存区别
|
2月前
|
存储 缓存 算法
说说什么是本地缓存、分布式缓存以及多级缓存,它们各自的优缺点?
说说什么是本地缓存、分布式缓存以及多级缓存,它们各自的优缺点?
|
3月前
|
缓存 NoSQL Redis
如何在Python中使用Redis或Memcached进行缓存?
如何在Python中使用Redis或Memcached进行缓存?
29 2
|
4月前
|
存储 缓存 大数据
本地缓存和分布式缓存
本地缓存和分布式缓存
68 0