zoukankan      html  css  js  c++  java
  • ASP.NET Core教程:ASP.NET Core中使用Redis缓存

    参考网址:https://www.cnblogs.com/dotnet261010/p/12033624.html

    一、前言

    我们这里以StackExchange.Redis为例,讲解如何在ASP.NET Core中如何使用Redis实现缓存。首先需要安装Redis和RedisDesktopManager。RedisDesktopManager用来查看Redis缓存里面的数据。如何安装Redis这里不在讲述。

    二、安装StackExchange.Redis

    在NuGet上安装StackExchange.Redis,如下图所示:

     安装完成以后在依赖项里面就可以看到:

    三、添加配置

     在appsettings.json文件里面添加Redis相关配置信息:

    复制代码
    {
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "AllowedHosts": "*",
      "Redis": {
        "Default": {
          "Connection": "127.0.0.1:6379",
          "InstanceName": "local",
          "DefaultDB": 8
        }
      }
    }
    复制代码

    四、Redis帮助类

     创建Redis帮助类,代码如下:

    复制代码
    using StackExchange.Redis;
    using System;
    using System.Collections.Concurrent;
    
    namespace RedisDemo
    {
        public class RedisHelper : IDisposable
        {
            //连接字符串
            private string _connectionString;
            //实例名称
            private string _instanceName;
            //默认数据库
            private int _defaultDB; 
            private ConcurrentDictionary<string, ConnectionMultiplexer> _connections;
            public RedisHelper(string connectionString, string instanceName, int defaultDB = 0)
            {
                _connectionString = connectionString;
                _instanceName = instanceName;
                _defaultDB = defaultDB;
                _connections = new ConcurrentDictionary<string, ConnectionMultiplexer>();
            }
    
            /// <summary>
            /// 获取ConnectionMultiplexer
            /// </summary>
            /// <returns></returns>
            private ConnectionMultiplexer GetConnect()
            {
                return _connections.GetOrAdd(_instanceName, p => ConnectionMultiplexer.Connect(_connectionString));
            }
    
            /// <summary>
            /// 获取数据库
            /// </summary>
            /// <param name="configName"></param>
            /// <param name="db">默认为0:优先代码的db配置,其次config中的配置</param>
            /// <returns></returns>
            public IDatabase GetDatabase()
            {
                return GetConnect().GetDatabase(_defaultDB);
            }
    
            public IServer GetServer(string configName = null, int endPointsIndex = 0)
            {
                var confOption = ConfigurationOptions.Parse(_connectionString);
                return GetConnect().GetServer(confOption.EndPoints[endPointsIndex]);
            }
    
            public ISubscriber GetSubscriber(string configName = null)
            {
                return GetConnect().GetSubscriber();
            }
    
            public void Dispose()
            {
                if (_connections != null && _connections.Count > 0)
                {
                    foreach (var item in _connections.Values)
                    {
                        item.Close();
                    }
                }
            }
        }
    }
    复制代码

    五、添加服务依赖项

     在Startup.cs类的ConfigureServices方法里面添加服务注入:

    复制代码
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    
    namespace RedisDemo
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                //redis缓存
                var section = Configuration.GetSection("Redis:Default");
                //连接字符串
                string _connectionString = section.GetSection("Connection").Value;
                //实例名称
                string _instanceName = section.GetSection("InstanceName").Value;
                //默认数据库 
                int _defaultDB = int.Parse(section.GetSection("DefaultDB").Value ?? "0");           
                services.AddSingleton(new RedisHelper(_connectionString, _instanceName, _defaultDB));
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseMvc();
            }
        }
    }
    复制代码

    六、在控制器中使用

     新建一个控制器,然后通过构造函数注入:

    复制代码
    using Microsoft.AspNetCore.Mvc;
    using StackExchange.Redis;
    
    namespace RedisDemo.Controllers
    {
        [Route("api/redis")]
        [ApiController]
        public class RedisController : ControllerBase
        {
            private readonly IDatabase _redis;
            public RedisController(RedisHelper client)
            {
                _redis = client.GetDatabase();
            }
    
            [HttpGet]
            public string Get()
            {
                // 往Redis里面存入数据
                _redis.StringSet("Name", "Tom");
                // 从Redis里面取数据
                string name = _redis.StringGet("Name");
                return name;
            }
        }
    }
    复制代码

    七、测试

    运行程序,使用Postman测试控制器:

    然后通过RedisDesktopManager查看Redis里面的数据,这里使用的Db8数据库:

     
  • 相关阅读:
    jq 判断单选是否选中
    C# Split 分隔符为字符串及空格的处理
    MSSQL中的bit类型
    js 判断textarea 不为空
    [转]C#中out 及 ref 区别
    [转]asp.net中时间差的问题
    [转]C# Array 数组 及 一些操作
    Addr、@运算符与Pointer类型
    关于Pascal语言中的分号
    关于以后的文章
  • 原文地址:https://www.cnblogs.com/bruce1992/p/15085980.html
Copyright © 2011-2022 走看看