从0到1,为ASP.NET Core项目添加redis支持(全程使用copilot编码)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近做需求需要用到redis,之前只在java用过,c#的使用还不清楚,故总结记录一下工作流。全程使用copilot进行代码编写


一、需求背景

需求是一个简单的获取token的需求,token获取需要经过http调用第三方系统,故为了减少http调用,设置redis来缓存token数据。


二、询问copilot工作流

1.简单询问

上来就先简单问问,如何导入redis:
在这里插入图片描述
可以看到,由于是刚开始发起提问,没有上下文,它给我整个了python的,我需要c#的,故继续提问。
在这里插入图片描述
这次是c#的方法了,但是更类似那种自己测试来玩玩的写法, 不符合我们的ASP.NET Core项目需求,故再次具体提问。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,这次的回答就比较具体了,从appsetting配置,到startup的注入,到实际代码里面的使用(他这里是直接在controller里面使用,我们一般还是建个RedisHeloer工具类来统一使用,后面再具体询问这方面)都有给出。至此,理论上是可以完整的测试并使用redis了,但是,我们还需了解更多细节才能应用到自己的代码里。

2.细节询问

我们可以注意到,虽然上一步中给出了大体使用步骤,但是还有一些地方的细节是模糊不清的,比如这个redis的ConnectionString,就写得比较不清不楚,一个localhost,显然不能满足需求
在这里插入图片描述
故就此细节再次进行提问:
在这里插入图片描述
在这里插入图片描述
这次的回答就比较具体了,从中我们可知redis链接串还可以指定端口号,指定密码,指定数据库等属性,最终我们也是直接采用了它给出的完整配置。

至此,对应到我们的项目中,已经添加了如下代码:

首先是appsetting文件,定义了链接串:

  "Redis": {
   
   
    "ConnectionString": "localhost:6379,password=yourpassword,ssl=False,abortConnect=False,defaultDatabase=0"
  }

然后是startup文件,定义了redis链接的注入,以及我们redis工具类的注入:

    public static void ConfigureServices(IServiceCollection services,
        IConfigurationManager configuration)
    {
   
   

        // redis setting
        var redisConnectionString = configuration.GetSection("Redis:ConnectionString").Value;
        services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect(redisConnectionString));
        services.AddScoped<RedisHelper>();

    }

完成基础的配置跟注入后,就是具体的功能方法的提问,
在这里插入图片描述
在这里插入图片描述

现在我需要一个方法,可以做到redis有值的时候取值,无值的时候调用我传入的方法获取值,并set到redis去。可以看到,copilot给我返回了一个代码,但是注意,里面涉及了序列化与反序列化方法,并没有实现,我们可以继续就此追问。
在这里插入图片描述
在这里插入图片描述
这里它 给出了两种实现json序列化与反序列化的两种方式,System.Text.Json 和 Newtonsoft.Json ,我这里使用 Newtonsoft.Json 。
同时,我们设置rediskey跟value的时候,需要考虑过期时间,故继续询问如何设置过期时间。
在这里插入图片描述
在这里插入图片描述
可以看到,我们可以用StringSet方法来设置过期时间,它接收TimeSpan类型的参数。为了代码方便管理,像redis的过期时间,还有前面提到的rediskey,一般都是定义好常量,直接使用,而TimeSpan类型,由于不能设置成常量,所以我们把常量定义为过期时间的数值。

至此,对应到我们的项目中,又新添加了如下代码:
定义常量的静态类,定义了key跟过期时间。过期时间设置为3500s,是因为我们调用http接口获取的token过期时间是3600s,这样能保证让时间全覆盖

    public static class RedisConstants
    {
   
   
        public static class RedisKeys
        {
   
   
            public const string CRM_ADMIN_TOKEN_KEY = "crm_admin_t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值