一、.Net Core 配置Redis
Redis
非布式緩存 速度比SQL快
1、Redis 的數據存儲到 內存上
2、非關系型數據庫(緩存)
3、數據類型五種:
*string(字符串 《存儲字符串、整數或者浮點數》
一個字符串類型的值能存儲最大容量512M)、
*list(列表)、 hash(哈希《存儲鍵值對的無序散列表》) 、
*set(集合) 、zset (有序集合)(五種數據類型)
4、內存(閃存)的數據 關閉計算機時 會消失
5、Redis 持久化(將數據保存到硬盤上)方案(兩種):
5.1、RDB(默認持久化方案)RDB 是 Redis 默認的持久化方案。
在指定的時間間隔內,執行指定次數的寫操作,則會將內存中的數據寫入到磁盤中。
即在指定目錄下生成一個dump.rdb文件。Redis 重啟會通過加載dump.rdb文件恢復數據。 (以快照方式) 恢復速度快,但是容易丟數據
5.2、AOF:Redis 默認不開啟。
它的出現是為了彌補RDB的不足(數據的不一致性),所以它采用日志的形式來記錄每個寫操作,並追加到文件中。
Redis 重啟的會根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。(恢復時間較長,數據完整性)
1、關系型數據庫
2、常用的數據類型: int varchar datetime float double
下載安裝及密碼配置
https://blog.csdn.net/sco5282/article/details/122884225
1、運行Redis
1.1、
2、啟動 redis
2.1第一種:通過執行命令的方式啟動服務
redis-server redis.windows.conf
2.2第二種、通過命令將啟動服務的命令做成本電腦服務
redis-server --service-install redis.windows.conf
直接任務管理器中操作啟動、關閉
3、查看redis數據
3.1 第一種:通過敲寫命令獲取
---第2步2.1中黑框不關閉、用同樣的方法再次打開一個黑框敲對應命令查看
3.2 第二種:通過管理工具管理Redis
https://blog.csdn.net/weixin_52826368/article/details/126256943
二、Redis使用過程中的錯誤
控制台啟用報錯:
redis-server.exe redis.windows.conf
在Windows下啟動redis報錯:Creating Server TCP listening socket *:6379: bind: No error
如圖所示:
解決方案:
直接在命令行中輸入:redis-cli.exe
如下圖所示:
然后再輸入:shutdown
意思就是關閉的意思,如下圖所示;
然后再輸入:exit
意思就是退出的意思,如下圖所示;
然后重新輸入啟動命令:redis-server.exe redis.windows.conf
如圖所示,很優雅的解決
參考文獻:https://blog.csdn.net/qq_38220334/article/details/105527236
.net Core存入數據時報錯
原因連接報錯:Redis連接報錯:ERR Client sent AUTH, but no password is set
原因:新安裝沒有對redis設置密碼,但是連接時有密碼,所以需要對redis設置密碼;產生這個問題的原因異常信息里已經說明,就是Redis服務器沒有設置密碼,但客戶端向其發送了AUTH(authentication,身份驗證)請求攜帶着密碼,導致報錯。既然是沒有設置密碼導致的報錯,那我們就把Redis服務器給設置上密碼就好了。
參考文獻:https://blog.csdn.net/u014026084/article/details/105767907
# requirepass foobared requirepass 123456 //123456是設置的密碼
修改后重啟;
三、.Net Core代碼中將數據存入Redis / 取出Redis數據
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添加數據
給string類型賦值使用的關鍵字Set
獲取string類型使用的命令Get
//獲取對應鍵值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); } }
7、設置設置Reids的過期時間
_distributedCache.SetString("shoppingCar", JsonConvert.SerializeObject(list), new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(5))); //設置超時時間5后過期
成功存儲到redis數據后打開reids管理工具可以查看到: