1.缓存概念   1.什么是缓存     这里要讲到的缓存是服务端缓存,简单的说,缓存就是将一些实时性不高,但访问又十分频繁,或者说要很长时间才能取到的数据给存在内存当中,当有请求时直接返回,不用经过数据库或接口获取。这样就可以减轻数据库的负担。   2.为什么要用缓存     总的来说就是为了提高响应速度(用户体验度),减少数据库访问频率。     在一个用户看来,软件使用的体验度才是关键,在对实时性要求不高的情况下,用户肯定会觉得打开界面的响应速度快,能保证平常工作的应用才是好的。因此为了满足这个需求,通过使用缓存,就可以保证满足在正常工作的前提下响应时间尽可能短。     例如:当客户端向服务器请求某个数据时,服务器先在缓存中找,如果在缓存中,就直接返回,无需查询数据库;如果请求的数据不在缓存中,这时再去数据库中找,找到后返回给客户端,并将这个资源加入缓存中。这样下次请求相同资源时,就不需     要连接数据库了。而且如果把缓存放在内存中,因为对内存的操作要比对数据库操作快得多,这样请求时间也会缩短。每当数据发生变化的时候(比如,数据有被修改,或被删除的情况下),要同步的更新缓存信息,确保用户不会在缓存取到旧的数据。     如果没有使用缓存,用户去请求某个数据,当用户量和数据逐渐增加的时候,就会发现每次用户请求的时间越来越长,且数据库无时不刻都在工作。这样用户和数据库都很痛苦,时间一长,就有可能发生下以下事情:       1.用户常抱怨应用打开速度太慢,页面经常无响应,偶尔还会出现崩溃的情况。       2.数据库连接数满或者说数据库响应慢(处理不过来)。       3.当并发量上来的时候,可能会导致数据库崩溃,使得应用无法正常使用。  2.选用Redis还是Memcached   简单说下这两者的区别,两者都是通过key-value的方式进行存储的,Memcached只有简单的字符串格式,而Redis还支持更多的格式(list、 set、sorted set、hash table ),缓存时使用到的数据都是在内存当中,   不同的在于Redis支持持久化,集群、简单事务、发布/订阅、主从同步等功能,当断电或软件重启时,Memcached中的数据就已经不存在了,而Redis可以通过读取磁盘中的数据再次使用。   这里提高Windows版的安装包:传送门 可视化工具:因文件太大无法上传到博客园。代码仓库中有,需要的私信哦~  3.两者在NetCore 中的使用   Memcached的使用还是相当简单的,首先在 Startup 类中做以下更改,添加缓存参数 赋值给外部类来方便使用   复制代码 public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMemoryCache memoryCache) { //.... 省略部分代码 DemoWeb.MemoryCache = memoryCache; //.... 省略部分代码 } 复制代码 DemoWeb中的代码: 复制代码 public class DemoWeb { //....省略部分代码 /// /// MemoryCache /// public static IMemoryCache MemoryCache { get; set; } /// /// 获取当前请求客户端IP /// /// public static string GetClientIp() { var ip = HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault()?.Split(',')[0].Trim(); if (string.IsNullOrEmpty(ip)) { ip = HttpContext.Connection.RemoteIpAddress.ToString(); } return ip; } } 复制代码   然后创建 MemoryCache 来封装些缓存的简单方法 View Code   其实接下来就可以直接使用缓存了,但为了方便使用,再建一个缓存类别的中间类来管理。 UserCache   测试是否可以正常使用:代码与截图 复制代码 [HttpGet] [Route("mecache")] public ActionResult ValidToken() { var key = "tkey"; UserCache.Set(key, "测试数据"); return Succeed(UserCache.Get(key)); } 复制代码   可以清楚的看到 MemoryCache 可以正常使用。   那么接下来将讲到如何使用 Redis 缓存。先在需要封装基础类的项目 Nuget 包中添加 StackExchange.Redis 依赖。然后添加Redis 连接类 RedisConnectionFactory   再添加Redis客户端类 RedisClient   然后再添加Redis连接生成工具类 RedisFactory   这里要使用到前面的静态扩展方法。请自行添加 传送门 ,还需要将 Startup 类中的 Configuration 给赋值到 DemoWeb中的 Configuration 字段值来使用。   在配置文件 appsettings.json 中添加 复制代码 "Redis": { "ConnectionString": "127.0.0.1:6379", "Pwd": "", "DefaultDatabase": 0 } 复制代码   再添加Redis缓存使用类 RedisCache   到这来基本就快可以拿来测试是否可以用了。但是前提是得把 Redis 给运行起来。   将上面的 Redis安装包安装,并启动所安装文件夹中的 redis-server.exe 程序,若出现闪退情况,就运行 redis-cli.exe 程序,然后输入 shutdown 按下回车,重新运行 redis-server.exe 程序,就会出现这个界面。   到这来,添加一个测试方法来看看效果。借助Redis可视化工具查看结果如下   测试完美成功,由于时间问题,上面 RedisCache只有字符串的方法,没有加其它类型的方法。有需要的自己加咯~   在下一篇中将介绍如何在NetCore中如何使用 过滤器来进行权限验证   有需要源码的在下方评论或私信~给我的SVN访客账户密码下载,代码未放在GitHub上。svn中新加上了Redis安装包及可视化工具。 ------------------------------------------------------------------------------------------------------------------------------------------------------------- 学习本是一个不断模仿、练习、创新、超越的过程。 由于博主能力有限,文中可能存在描述不正确,欢迎指正、补充! 感谢您的阅读,麻烦动动手指点个推荐哟。 ------------------------------------------------------------------------------------------------------------------------------------------------------------- 作者:Levy-伟      出处:https://www.cnblogs.com/levywang/      本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 https://www.cnblogs.com/levywang/p/coreframe_8.html