MemCached配置与缓存知识概述

简介:

先看看百度百科里面对缓存的介绍:

缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,有大缓存,则可以将那些零碎数据暂存在缓存中,减小系统的负荷,也提高了数据的传输速度。

这个是介绍了电脑的硬盘缓存..当然,电脑里面包括很多种缓存,不是本文重点.我们主要关注这段话的几个关键点:速度,性能,减小系统的负荷,这就是缓存的优点.

ASP.NET缓存概述:

通常,应用程序可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高性能。 例如,如果应用程序使用复杂的逻辑来处理大量数据,然后再将数据作为用户频繁访问的报表返回,避免在用户每次请求数据时重新创建报表可以提高效率。 同样,如果应用程序包含一个处理复杂数据但不需要经常更新的页,则在每次请求时服务器都重新创建该页会使工作效率低下。

在这些情况下,为了帮助您提高应用程序的性能,ASP.NET 使用两种基本的缓存机制来提供缓存功能。 第一种机制是应用程序缓存,它允许您缓存所生成的数据,如 DataSet 对象或自定义报表业务对象。 第二种机制是页输出缓存,它保存页处理输出,并在用户再次请求该页时,重用所保存的输出,而不是再次处理该页。(摘自MSDN)

缓存适用范围:

1.频繁访问的数据
  原因:提高性能.应用程序使用复杂的逻辑来处理大量数据,然后再将数据作为用户频繁访问的报表返回,避免在用户每次请求数据时重新创建报表可以提高效率。

2.需要大量处理时间来创建的数据
  原因:提高性能.如果应用程序包含一个处理复杂数据但不需要经常更新的页,则在每次请求时服务器都重新创建该页会使工作效率低下。

ASP.NET缓存应用:

ASP.NET中通过Cache来管理应用程序缓存,也提供了对页面的缓存.

1,页面输出缓存:缓存整个页面,用户请求时不通过页面处理的生命周期,直接从内存中读取.主要用于一些不经常修改的页面,或者需要大量处理编译的页面有用.

2,页面部分输出缓存:缓存部分页面,也就是缓存用户控件(.ascx).

3,应用程序缓存:提供一种编程的方式来实现缓存,通过键值对的形式将任意数据存放到内存中,应用程序缓存是易丢失的,使用应用程序缓存的模式是,确定在访问某一项时该项是否存在于缓存中,如果存在,则使用。如果该项不存在,则可以重新创建该项,然后将其放回缓存中。这一模式可确保缓存中始终有最新的数据。

4,缓存依赖:Net 2.0引入的自定义缓存依赖项,特别是基于MS-SQL Server的SqlCacheDependency特性,使得我们可以避免“数据过期”的问题,它能够根据数据库中相应数据的变化,通知缓存,并移除那些过期的数据,可以参考我的一篇博文配置缓存依赖ASP.NET 下SQLServer2005 缓存依赖

缓存有它的优势和劣势,在使用时候应该视情况而用,在项目前期应预留缓存接口,在项目后期应该做性能优化加上缓存.

 

下面进入本文主题Memcached

对于一个新的应用我们开发者主要关心,它是什么,它能做什么,它有什么优势和劣势.怎么用..

Memcached是什么

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

Memcached能做什么

通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcached的优势和劣势

Memcache非常快,Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。

Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。当然Memcached也可以用在本地,但是相对于asp.net Cache那太不划算了.

现在比较常用的Mysql数据库,mysql默认开启了查询缓存,当数据表更新时,查询缓存会被更新,如果频繁的发生这种更新会导致查询缓存效率非常低下.如果mysql数据库量不大,可以使用mysql查询缓存,否则Memcached更合适.

还有一种共享内存方式,多个进程或者线程共享同一个缓存.虽然效率提高了不少,但是毕竟只能局限在一台机子上.

因为Memcached也是内存管理,所以也易丢失,理论Memcached可以达到并发的最大连接数是是200,这个数值应该可以调整,也取决于机器的配置.因为Memcached是分布式的,所以它的最大瓶颈在于网络连接.

Memcached怎么使用

1,windows下安装Memcached

Memcached当前版本是1.2.6 下载地址

服务的启动:

1, 将memcached-1.2.1-win32.zip解决到指定的地方,如e:\memcached

2 命令行输入 'e:\memcached\memcached.exe -d install' 
3 命令行输入 'E:\memcached\memcached.exe -d start' ,该命令启动 Memcached,默认监听端口为 11211

2,Ubuntu 下安装Memcached

启动终端,在终端下输入

sudo apt-get install memcached

现在安装成功后启动服务,

memcached -d -u root

具体的命令请参考下面的说明

常用设置:
-p <num>          监听的端口
-l <ip_addr>      连接的IP地址, 默认是本机
-d start          启动memcached服务
-d restart        重起memcached服务
-d stop|shutdown  关闭正在运行的memcached服务
-d install        安装memcached服务
-d uninstall      卸载memcached服务
-u <username>     以<username>的身份运行 (仅在以root运行的时候有效)
-m <num>          最大内存使用,单位MB。默认64MB
-M                内存耗尽时返回错误,而不是删除项
-c <num>          最大同时连接数,默认是1024
-f <factor>       块大小增长因子,默认是1.25
-n <bytes>        最小分配空间,key+value+flags默认是48
-h                显示帮助

.NET客户端工具有好多种,我用的是http://sourceforge.net/projects/memcacheddotnet/

运行以下代码测试一下.

static void Main(string[] args)
{
string[] serverlist = { "192.168.0.129:11211" };
//初始化池
SockIOPool sock = SockIOPool.GetInstance();
sock.SetServers(serverlist);

sock.InitConnections = 3;
sock.MinConnections = 3;
sock.MaxConnections = 5;

sock.SocketConnectTimeout = 1000;
sock.SocketTimeout = 3000;

sock.MaintenanceSleep = 30;
sock.Failover = true;

sock.Nagle = false;
sock.Initialize();

//获取客户端实例

MemcachedClient memcached = new MemcachedClient();
memcached.EnableCompression = false;

Console.WriteLine("-------Memcached测试-------");
memcached.Set("key1", "Value1");
if (memcached.KeyExists("key1"))
{
Console.WriteLine("存在key1..");
Console.WriteLine(memcached.Get("key1").ToString());
}
else
{
Console.WriteLine("不存在key1键");
}

Console.Read();
SockIOPool.GetInstance().Shutdown(); //关闭池, 关闭sockets
}

我在虚拟机里面装的Ubuntu,IP是192.168.0.192.运行成功以后代码之后说明Memcached配置成功.

后续再详细介绍.net下操作Memcached…

本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4020544.html ,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
1070 25
|
12月前
|
缓存 并行计算 监控
vLLM 性能优化实战:批处理、量化与缓存配置方案
本文深入解析vLLM高性能部署实践,揭秘如何通过continuous batching、PagedAttention与前缀缓存提升吞吐;详解批处理、量化、并发参数调优,助力实现高TPS与低延迟平衡,真正发挥vLLM生产级潜力。
2773 0
vLLM 性能优化实战:批处理、量化与缓存配置方案
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
2025 5
|
缓存 NoSQL 数据库
Django缓存机制详解:从配置到实战应用
本文全面解析Django缓存技术,涵盖配置方法与六大缓存后端,结合实战场景演示四种典型应用方式,帮助开发者提升Web应用性能,应对高并发挑战。
479 0
|
缓存 NoSQL API
Django缓存机制详解:从配置到实战应用
本文介绍了 Django 缓存机制的基础知识与实战应用,涵盖缓存概念、Redis 安装配置、缓存策略及 API 使用,并通过 RBAC 权限系统演示缓存的读写与删除操作,助力提升 Web 应用性能。
409 0
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
400 9
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
516 6
|
存储 缓存 安全
在 Service Worker 中配置缓存策略
Service Worker 是一种可编程的网络代理,允许开发者控制网页如何加载资源。通过在 Service Worker 中配置缓存策略,可以优化应用性能,减少加载时间,提升用户体验。此策略涉及缓存的存储、更新和检索机制。
|
存储 缓存 监控
|
存储 缓存 监控
配置 Webpack 5 持久化缓存时需要注意哪些安全问题?
【10月更文挑战第23天】通过全面、系统地分析和应对安全问题,能够更好地保障 Webpack 5 持久化缓存的安全,为项目的成功构建和运行提供坚实的安全基础。同时,要保持对安全技术的关注和学习,不断提升安全防范能力,以应对日益复杂的安全挑战。