什么是缓存
缓存就是用来避免频繁的到数据库或磁盘文件获取数据而建立的一个快速临时存储器。
缓存比数据库或磁盘容量更小,但速度快
内存是当前技术下最廉价且有效的缓存介质
缓存的作用
存储频繁访问的数据
临时存储耗时的计算结果
内存缓存减少IO
缓存类型
应用层缓存
客户端缓存
1、缓存数据库的查询结果,减少数据的压力。这个在大型网站是必须做的。
2、缓存磁盘文件的数据。比如常用的数据可以放到内存,不用每次都去读取磁盘,特别是密集计算的程序,比如中文分词的词库。
3、缓存某个耗时的计算操作,比如数据统计。
应用端缓存
数据库缓存
缓存磁盘文件的数据
缓存某个耗时的计算操作,比如数据统计
客户端缓存
浏览器端的缓存,可以让用户请求一次之后,下一次不在从服务器端请求数据,直接从本地缓存读取,可以减轻服务器负担也可以加快用户的访问速度。
前端缓存
主要针对静态文件类型,比如图片、CSS、JS、HTML等, CDN技术
Memcached
优点
1、支持分布式扩展 内存可以无限制扩大
2、分布式使用简单,可以在客户端直接设置多个memcached服务器
缺点
1、数据是保存在内存当中的,一旦服务进程重启,数据会全部丢失
对策:可以采取更改Memcached的源代码,增加定期写入硬盘的功能
2、Memcached以root权限运行,而且Memcached本身没有任何权限管理和认证功能,安全性不足
对策:可以将Memcached服务绑定在内网IP上,通过防火墙进行防护
安装
下载memcache的windows稳定版,解压放某个盘下面,比如在D:\memcached_en32or64\x64
在cmd下输入 D:\memcached_en32or64\x64 \memcached.exe -d install 安装
再输入: D:\memcached_en32or64\x64 \memcached.exe -d start 启动。默认分配64M内存,使用11211端口)
使用
首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的状态。
存储命令格式
<command name> <key> <flags> <exptime><bytes>
<data block>
<command name>:set/add/replace
<key>:查找关键字
<flags>:整型参数,客户机使用它存储关于键值对的额外信息
<exptime>:该数据的存活时间(以秒为单位,0表示永远)
<bytes>:存储字节数
<data block>:存储的数据块(可直接理解为key-value结构中的value)
底层架构提供的方法
底层架构提供了ITOO.Library.Core.Memcache.MemcacheHelper(此为静态类),直接调用
底层的静态方法
/// <summary>
///当缓存中没有数据的时候将数据写入缓存
/// </summary>
/// <paramname="key"></param>
/// <paramname="value"></param>
///<returns></returns>
public static boolAdd(string key, object value)
/// <summary>
///当缓存中没有数据的时候将数据写入缓存(含过期时间)
/// </summary>
/// <paramname="key"></param>
/// <paramname="value"></param>
/// <param name="expiresAt">过期时间</param>
///<returns></returns>
public static boolAdd(string key, object value, DateTime expiresAt)
/// <summary>
///替换缓存中的数据
/// </summary>
/// <paramname="key"></param>
/// <paramname="value"></param>
///<returns></returns>
public static boolReplace(string key, object value)
/// <summary>
///替换缓存中的数据(含过期时间)
/// </summary>
/// <paramname="key"></param>
/// <paramname="value"></param>
/// <param name="expiresAt">过期时间</param>
///<returns></returns>
public static boolReplace(string key, object value, DateTime expiresAt)
举例
添加缓存
MemcacheHelper.Add("Key", "Value! ");
获取缓存
MemcacheHelper.Get<string>(" Key ");
分布式缓存
1、按应用切分数据到不同的缓存服务器,这是一种比较简单和实用的方式。(每个系统一个memcached)
2、按照某种规则(hash,路由等等)把数据存储到不同的缓存服务器。
(封装一层,按照一定的规则,确定存到那台服务器上)
3、代理模式,应用在获取数据的时候都由代理透明的处理,缓存机制有代理服务器来处理。 (比较安全)采用 Magent 缓存代理;
本文介绍了缓存的基本概念及其重要作用,包括减少数据库压力、提高数据访问效率等方面。详细探讨了多种缓存类型,如应用层缓存、客户端缓存等,并重点讲解了Memcached的安装、配置及使用方法。
261

被折叠的 条评论
为什么被折叠?



