.Net Core 配置Reids
一、.Net Core 配置Reids
Redis
非布式快取 速度比SQL快
1、Redis 的資料儲存到 記憶體上
2、非關係型資料庫(快取)
3、資料型別五種:
string(字串)、 list(列表)、 hash(雜湊) 、set(集合) 、zset (有序集合)(五種資料型別)
4、記憶體(快閃記憶體)的資料 關閉計算機時 會消失
5、Redis 持久化(將資料儲存到硬碟上)方案(兩種):
1、RDB(預設持久化方案)RDB 是 Redis 預設的持久化方案。在指定的時間間隔內,執行指定次數的寫操作,則會將記憶體中的資料寫入到磁碟中。即在指定目錄下生成一個dump.rdb檔案。Redis 重啟會通過載入dump.rdb檔案恢復資料。 (以快照方式) 恢復速度快,但是容易丟資料
2、AOF:Redis 預設不開啟。它的出現是為了彌補RDB的不足(資料的不一致性),所以它採用日誌的形式來記錄每個寫操作,並追加到檔案中。Redis 重啟的會根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作。(恢復時間較長,資料完整性)
1、關係型資料庫
2、常用的資料型別: int varchar datetime float double
1、執行Redis
1、
2、啟動 redis
第一種:通過執行命令的方式啟動服務
redis-server redis.windows.conf
第二種、通過命令將啟動服務的命令做成本電腦服務
redis-server --service-install redis.windows.conf
直接工作管理員中操作啟動、關閉
3、檢視redis資料
第一種:通過敲寫命令獲取
---第2步黑框不關閉、用同樣的方法再次開啟一個黑框敲對應命令檢視
第二種:通過管理工具管理Redis
二、.Net Core程式碼中實現
1、引用拓展包 到對應專案中(哪裡用哪裡進行下載該包)
Microsoft.Extensions.Caching.StackExchangeRedis
2、配置到appsettings.json夾中Redis連線字串
//Redis連線字串 "RedisConnectionStrings": "127.0.0.1:6379,password=,defaultDatabase=0,connectTimeout=5000,syncTimeout=1000"
3、配置Redis引數 (Start.up中配置) 注入 ----類似於連線MSSQL字串操作步驟
//配置Redis services.AddStackExchangeRedisCache(options => { options.Configuration =Configuration.GetSection("RedisConnectionStrings").Value; //options.InstanceName = "SampleInstance"; });
4、通過依賴注入
4.1 引用Redis名稱空間
using Microsoft.Extensions.Caching.Distributed;
4.2通過建構函式依賴注入
5、程式碼獲取Redis資料 與 程式碼向Redis新增資料
//獲取對應鍵值ShoppingCart資料
//獲取key為一個數組列表格式
var key= distributedCache.GetString("ShoppingCart");
//將物件序列化字串 新增到redis中
//當下存入的為string形式 ,需要對新增的資料序列化
distributedCache.SetString("ShoppingCart", jsonData);
6.、例子
例子功能邏輯:該段程式碼邏輯為向購物車新增商品,
當購物車之前有選中該商品時,則在購物車原有購買數量基礎上+1,
當購物車中沒有該選中商品時,則將該商品 /// <summary>
public readonly GoodsDbContext db;
public readonly IDistributedCache distributedCache;
/// <summary>
/// 依賴注入 上下文 Redis注入
/// </summary>
public ShppintCartdal(GoodsDbContext dbContext,IDistributedCache d)
{
db = dbContext;
distributedCache = d;
}
/// 新增購物車 或更改購買數量 /// </summary> /// <param name="s"></param> /// <returns></returns> public ApiResult AddGoods(ShoppingCart s) { //先定義List列表 因為返回的資料也是放入列表中的便於後面查詢,所以新增的也應該是列表 List<ShoppingCart> list = new List<ShoppingCart>(); //去Redis中查詢資料 //根據鍵名查詢 獲取的Key為一個數組列表格式 var key= distributedCache.GetString("ShoppingCart");
//如果是key為NULL 代表是第一次訪問Redis if (string.IsNullOrEmpty(key)) { //先將物件儲存到list中 list.Add(s); //對列表序列化 前提下載包json 引用 using Newtonsoft.Json; var json = JsonConvert.SerializeObject(list);
//將物件序列化字串 新增到redis中 distributedCache.SetString("ShoppingCart", json); } else //代表key有值 則進行 查詢 { //先將Key反序列化為物件 var listDes = JsonConvert.DeserializeObject<List<ShoppingCart>>(key);
//根據題意獲取是否購物車中有此商品 var item = listDes.FirstOrDefault(u => u.Gid == s.Gid); if (item != null) { item.BuyNum += 1; //判斷是否假刪除 此步緣由與根據題意編輯 if (item.IsDelete == 1) { item.BuyNum = 1; item.IsDelete = 0; } //將修改後的資料所在的整個物件序列化字串 新增到redis中 var json = JsonConvert.SerializeObject(listDes); distributedCache.SetString("ShoppingCart", json); } //不存在 新增新的資料到購物車 else { //將物件儲存到返回時序列化後的listDes中 listDes.Add(s); //將物件序列化字串 新增到redis中 var json = JsonConvert.SerializeObject(listDes); distributedCache.SetString("ShoppingCart", json); } }