.Net Core使用Redis


一.准備  

  在.Net Core項目中使用StackExChange.Redis來使用Redis,這里通過Nuget去安裝相關的包。安裝完如下圖。

二.配置

  在appsettings.json中配置Redis的相關信息。一般需要配置連接地址、實例名、哪個DB、密碼。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Redis": {
    "Default": {
      "Connection": "127.0.0.1:6379",
      "InstanceName": "local",
      "DefaultDB": 0,
      "Password": "12345"
    }
  }
}

三.使用

  在Startup.cs中添加redis的依賴。

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");
    //密碼
    string _password = section.GetSection("Password").Value;
    //注入容器
    services.AddSingleton(new RedisHelper(_connectionString, _instanceName, _password, _defaultDB));
}

  Redis使用類的定義。

public class RedisHelper : IDisposable
{
    //連接字符串
    private string _connectionString;
    //實例名稱
    private string _instanceName;
    //密碼
    private string _password;
    //默認數據庫
    private int _defaultDB;
    private ConcurrentDictionary<string, ConnectionMultiplexer> _connections;
    public RedisHelper(string connectionString, string instanceName, string password, int defaultDB = 0)
    {
        _connectionString = connectionString;
        _instanceName = instanceName;
        _password = password;
        _defaultDB = defaultDB;
        _connections = new ConcurrentDictionary<string, ConnectionMultiplexer>();
    }

    /// <summary>
    /// 獲取ConnectionMultiplexer
    /// </summary>
    /// <returns></returns>
    private ConnectionMultiplexer GetConnect()
    {
        return _connections.GetOrAdd(_instanceName, p => ConnectionMultiplexer.Connect(_connectionString + ",password=" + _password));
    }

    /// <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();
            }
        }
    }
}

  在接口中注入依賴去使用。

[Route("api/test")]
[ApiController]
public class TestController : ControllerBase
{
    private readonly IDatabase _redis;
    public TestController(RedisHelper client)
    {
        //創建Redis連接對象
        _redis = client.GetDatabase();
    }

    //格式 string
    //cmd: getset key value
    [Route("set")]
    [HttpPost]
    public string Set(string key, string value)
    {
        string result;
        // 往Redis里面存入數據
        if (_redis.StringSet(key, value))
        {
            result = "成功";
        }
        else
        {
            result = "失敗";
        }
        return result;
    }

    //格式 string
    //cmd: get key
    [Route("get")]
    [HttpGet]
    public string Get(string key)
    {
        // 從Redis里面取數據
        string value = _redis.StringGet(key);
        return value;
    }

    //格式 hash
    //cmd: hset key field value
    [Route("hset")]
    [HttpPost]
    public string HSet(string key, string hashField, string value)
    {
        string result;

        // 往Redis里面存入數據
        if (_redis.HashSet(key, hashField, value))
        {
            result = "成功";
        }
        else
        {
            result = "失敗";
        }
        return result;
    }

    //格式 hash
    //cmd: hget key field
    [Route("hget")]
    [HttpGet]
    public string HGet(string key, string hashField)
    {
        // 從Redis里面取數據
        string value = _redis.HashGet(key, hashField);
        return value;
    }
}

  IDataBase接口定義了方法,基本包括了Redis操作的各個方法,可以參考Redis的命令行方法來查找對應的方法。

  Redis命令可以參考這篇 https://www.cnblogs.com/shadoll/p/14388289.html

四.總結

  1.在.Net Core安裝Redis使用的StackExChange.Redis包,確保Redis服務處於正常啟動狀態,配置連接項即可。

  2.熟悉Redis的命令行操作,就可以大致了解StackExChange.Redis的使用方法(它底層應該也是執行Redis的命令操作)。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM