专栏首页晓晨的专栏ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存

ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存

一.Redis是什么?

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。(引用自百度百科)

二.为什么使用Redis

Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding)等特性,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。

使用Redis可以极大的提升我们应用程序的性能,比如一个小说网站,需要显示阅读量排名前10的小说,如果每次都要去从数据库查询就太耗费数据库性能了,也会增加我们的响应时间。我们可以将这个列表放在redis里面,这样每次就可以从redis里面取数据量,速度是非常快的。

三.aspnet-zero-core 如何使用Redis缓存

  项目“MyCompanyName.MyProject.Web.Core” 以下简称“Web.Core”

  项目“MyCompanyName.MyProject.Web.Mvc” 以下简称“Web.Mvc”

  使用Redis缓存,请先通过nuget安装包 Abp.RedisCache

  1.打开项目“Web.Core” 的“AbpZeroTemplateWebCoreModule.cs” 在“PreInitialize”方法里

1             Configuration.Caching.UseRedis(options =>
2             {
3                 options.ConnectionString = _appConfiguration["Abp:RedisCache:ConnectionString"];
4                 options.DatabaseId = _appConfiguration.GetValue<int>("Abp:RedisCache:DatabaseId");
5             });

  2.修改redis配置 配置文件在项目“Web.Mvc”里 appsettings.json

  这里说一下DatabaseId,及Redis数据库ID,不同的数据库ID有助于在同一服务器中创建不同的密钥空间(隔离缓存)。

  3.设置默认过期时间,同样是在 项目“Web.Core” 的“AbpZeroTemplateWebCoreModule.cs” 在“PreInitialize”方法里,放在redis代码之前 

 1             //设置所有缓存的默认过期时间
 2             Configuration.Caching.ConfigureAll( cache =>
 3             {
 4                 cache.DefaultAbsoluteExpireTime = TimeSpan.FromMinutes(2);
 5             });
 6             //设置某个缓存的默认过期时间 根据 "CacheName" 来区分
 7             Configuration.Caching.Configure("CacheName", cache =>
 8             {
 9                 cache.DefaultAbsoluteExpireTime = TimeSpan.FromMinutes(2);
10             });

  4. 最后不要忘了设置模块依赖

四.验证是否设置成功

启动运行项目,查看redis里是否有数据。这里我是用的是redisdesktopmanager,下载地址:https://redisdesktop.com/download

很明显的看出已经使用成功了。

五.如何在代码中使用缓存

1.通过容器注入缓存管理器,这里可以使用属性注入或者构造方法注入均可

2.使用缓存

这里Get方法有两个参数,第一个参数是缓存中的key,第二个参数是当缓存中数据不存在,那么执行获取数据的方法。

思考:我们都知道Redis是跨进程甚至跨域的缓存,有时候我们没必要使用Redis缓存,使用本机缓存就够,我想一定会存在同时使用Redis缓存和本机缓存即 MemoryCache,

ABP默认应该是不支持存在多个缓存,至少目前我在官方文档没看到。我们查看,启用Redis缓存那几句代码中, UseRedis 方法的源代码:

可以发现在上图红框处注入了 AbpRedisCacheManager ,,然后可想而知我们在使用缓存的时候通过容器注入的就是Redis缓存了,那么我们只需要将MemoryCache也注入即可同时使用Redis和MemoryCache。

这只是我的想法,并没有进行测试,有兴趣的朋友可以测试一下。

好了Redis的设置十分简单,下篇将会给大家分享一下,我在core下使用通过mysql数据库来进行存储的hangfire的那些坑~

 如果你觉得写的不错,请点一下下面的“推荐”,这是对我分享技术经验的支持,谢谢!↓↓↓↓↓↓↓↓↓↓↓

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASP.NET Core 2.x 到 3.1 迁移指南

    今日(2019/12/4).NET Core 3.1 正式发布了,ASP.NET Core 3.1 随之发布,这次 3.0 到 3.1经过了两个月的短周期,并没...

    晓晨
  • ASP.NET Core 3.0 迁移避坑指南

    .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi...

    晓晨
  • Visual Studio 2019 16.1 使用 .NET Core 3.0

    早在很久之前微软便公布 .NET Core 3.0 将支持开发Winform应用程序等等新特性,现如今 .NET Core 3.0 预览版已经出来第五个预览版了...

    晓晨
  • 为什么我们做分布式要用 Redis ?

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里...

    芋道源码
  • 缓存淘汰、缓存穿透、缓存击穿、缓存雪崩、数据库缓存双写一致性

    为什么需要缓存淘汰?你需要缓存30G的数据,但是Redis本身只能使用10G的内存,那你就得做个取舍了,毕竟鱼与熊掌不可兼得。为了利益最大化肯定要保留最重要的1...

    Java学习录
  • 为什么我们做分布式使用 Redis ?

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里...

    一个优秀的废人
  • 详解HTTP缓存

    HTTP缓存是一项重要且常见的web性能优化手段。当通过浏览器发送HTTP请求时,如果浏览器本地有所要请求的文档副本,那么浏览器可以直接从本地存储中读取该文档,...

    黄泽杰
  • 为什么我们做分布式使用 Redis?

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里...

    黄泽杰
  • Web缓存 - HTTP协议缓存

    Web缓存一般分为浏览器缓存、代理服务器缓存以及网关缓存,本文主要讲的是 浏览器缓存,其它两种缓存大家自行去了解下。

    laixiangran
  • Progressive Web Apps

    一种提升Web用户体验的方式。除了Web天生的(便捷)体验外,还有3个特点:Reliable, Fast, Engaging

    ayqy贾杰

扫码关注云+社区

领取腾讯云代金券