ASP.NET CORE[練習22]-Redis6-Microsoft.Extensions.Caching.redis

修武FEN青發表於2019-09-18

練習+部落格,量化自己的進步!

前幾篇的練習使用的是StackExchange.Redis客戶端,redis的基本用法也都明白了。Microsoft.Extensions.Caching.redis是封裝了StackExchange.Redis,Nuget包裝了Microsoft.Extensions.Caching.redis,就不需要裝StackExchange.Redis了。

  • byte[]
  • Get,GetAsync
  • Set,SetAsync
  • RefreshRefreshAsync
  • RemoveRemoveAsync

安裝Microsoft.Extensions.Caching.redis

安裝這個

解除安裝這個

注入服務

// 這個是之前使用StackExchange.Redis時寫的,可以共存
services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect("localhost"));
// 這個是新加的
services.AddDistributedRedisCache(options=> {
    options.Configuration = "localhost";
    options.InstanceName = "RedisDemoInstance";
});

Controller注入

public class AlbumsController : Controller
{
    private readonly IDatabase _db;
    private readonly IDistributedCache distributedCache;

	// 注入IDistributedCache一個就行了,不需要像IConnectionMultiplexer再賦值IDatabase了
    public AlbumsController(IConnectionMultiplexer redis, IDistributedCache distributedCache)
    {
		this._db = redis.GetDatabase();
        this.distributedCache = distributedCache;
    }

使用

var value = distributedCache.Get("name-key");
 string valStr = string.Empty;
 if (value == null)
 {
     valStr = "孫悟空三打白骨精!";
     // 儲存的資料必須為位元組,所以需要轉換一下
     var encoded = Encoding.UTF8.GetBytes(valStr);
     // 配置類:30秒過時
     var options = new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(30));
     distributedCache.Set("name-key", encoded, options);
 }
 else
 {
     valStr = Encoding.UTF8.GetString(value);
 }
 ViewBag.ValStr = valStr;

 

相關文章