csredis-in-asp.net core理論實戰-使用示例
csredis GitHub
- https://github.com/2881099/csredis
示例原始碼
https://github.com/luoyunchong/dotnetcore-examples/blob/master/Caching/OvOv.CsRedis/
前提
- 安裝並配置好redis服務,可用。
- vs2017或vs2019或vscode
- .net core 2.2+ sdk
建立一個. NET Core WebAPI專案
想執行 . NET Core CLI命令列,要cd到csproj同級目錄中
dotnet add package CSRedisCore
#mvc分散式快取注入
dotnet add package Caching.CSRedis
或
程式包管理控制檯(Package Manager)中執行,選擇你的專案
Install-Package CSRedisCore
Install-Package Caching.CSRedis
普通模式
- appsettings.json配置項
{
"CsRedisConfig": {
"DefaultConnectString": "127.0.0.1:6379,password=,defaultDatabase=0,prefix=csredis-default-"
}
}
- Startup.cs中配置如下
public void ConfigureServices(IServiceCollection services)
{
// eg 1.單個redis實現 普通模式
//CSRedisClient csredis = new CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=csredis,prefix=csredis-example");
//eg 2.單個redis,使用appsettings.json中的配置項
IConfigurationSection configurationSection = Configuration.GetSection("CsRedisConfig:DefaultConnectString");
CSRedisClient csredis = new CSRedisClient(configurationSection.Value);
//初始化 RedisHelper
RedisHelper.Initialization(csredis);
//註冊mvc分散式快取
services.AddSingleton<IDistributedCache>(new CSRedisCache(RedisHelper.Instance));
...其他程式碼
}
- ValuesController.cs
通過靜態方法呼叫,鍵為test1 ,value為前臺傳來的值,快取60s
獲取值Get方法, test1作為鍵,返回值給前臺。60s後再獲取,將無法得到值。
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
RedisHelper.Set("test1", value, 60);
}
// GET api/values
[HttpGet]
public ActionResult<string> Get()
{
return RedisHelper.Get("test1");
}
普通模式-控制檯
class Program
{
static void Main(string[] args)
{
var csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=CsRedis,prefix=CsRedis_ConSole_Example");
RedisHelper.Initialization(csredis);
RedisHelper.Set("test1", "123123", 60);
string result = RedisHelper.Get("test1");
Console.WriteLine("key:test1,value:" + result);
Console.ReadKey();
}
}
哨兵模式
前提
- 瞭解哨兵模式的作用
- 並有一個可用的主(master)redis服務,二個從(slaver)服務,有三個哨兵監控。
- appsettings.json配置項
{
"CsRedisConfig": {
"SentinelConnectString": "mymaster,password=,prefix=csredis-example-",
"Sentinel": [
"127.0.0.1:26379",
"127.0.0.1:26380",
"127.0.0.1:26381"
]
}
}
- Startup.cs中配置如下
public void ConfigureServices(IServiceCollection services)
{
//eg.3 使用appsettings.json,哨兵模式
IConfigurationSection configurationSection = Configuration.GetSection("CsRedisConfig:SentinelConnectString");
string[] sentinelValues = Configuration.GetSection("CsRedisConfig:Sentinel").Get<string[]>();
CSRedisClient csredis = new CSRedisClient(configurationSection.Value, sentinelValues);
//初始化 RedisHelper
RedisHelper.Initialization(csredis);
//註冊mvc分散式快取
services.AddSingleton<IDistributedCache>(new CSRedisCache(RedisHelper.Instance));
...其他程式碼
}
- 使用快取時與普通模式相同,不過關閉某一個redis服務,服務依舊可用,不過如果redis處於切換cluster過程,將會有短暫的失敗,不過一會就會恢復。
相關文章
- .NET Core開發者的福音之玩轉Redis的又一傻瓜式神器推薦 https://www.cnblogs.com/yilezhu/p/9947905.html
- 【由淺至深】redis 實現釋出訂閱的幾種方式 https://www.cnblogs.com/kellynic/p/9952386.html
- 深入剖析Redis系列(四) - Redis資料結構與全域性命令概述 https://juejin.im/post/5bb01064e51d453eb93d8028
RedisHelper 與redis-cli命令列保持一致的api,會使用redis相關命令,即會使用RedisHelper方法
配合redis-cli命令列
static void Main()
{
CSRedisClient csredis = new CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=CsRedis,prefix=CsRedis_ConSole_Example");
RedisHelper.Initialization(csredis);
Test();
Console.ReadKey();
}
static void Test()
{
//1.set key value [ex seconds] [px milliseconds] [nx|xx]
//setex key seconds value #設定鍵的值,並指定此鍵值對應的 有效時間。
//setnx key value #鍵必須 不存在,才可以設定成功。如果鍵已經存在,返回 0。
RedisHelper.Set("redis-key", "just a string value", 50);//setex "redis-key" 50 "just a string value"
RedisHelper.Set("redis-key-class",DateTime.Now, 30);
//1.1.2. 獲取值
//get key
//如果要獲取的 鍵不存在,則返回 nil(空)。
string redisValue = RedisHelper.Get("redis-key");
Console.WriteLine($"setex redis-key 50 just a string value ,RedisHelper.Get()得到值如下:{redisValue}");
DateTime now = RedisHelper.Get<DateTime>("redis-key-class");
Console.WriteLine($"setex redis-key-class DateTime.Now,RedisHelper.Get()值如下{now}");
//1.1.3. 批量設定值
//mset key value [key value ...]
RedisHelper.MSet("a", "1", "b", "2", "c", "3","d","4");//等價於mset a 1 b 2 c 3 d 4
//1.1.4. 批量獲取值
//mget key [key ...]
string[] mgetValues = RedisHelper.MGet<string>("a", "b", "c","d");
Console.WriteLine($"mset a 1 b 2 c 3 d 4, RedisHelper.MGet()得到的值是");
foreach (var mgetValue in mgetValues)
{
Console.Write($"{mgetValue}、");
}
Console.WriteLine();
//1.1.5. 計數
//incr key
//incr 命令用於對值做 自增操作
//自增指定數字
long incr = RedisHelper.IncrBy("key");
Console.WriteLine($"incr key, incr得到的值是{incr}");
//設定自增數字的增量值
incr = RedisHelper.IncrBy("key",2);
Console.WriteLine($"再次incrby key 2, incr得到的值是{incr}");
incr = RedisHelper.IncrBy("key", -2);
Console.WriteLine($"再次decrby key -2, incr得到的值是{incr}");
//exists key
bool isExistsKey = RedisHelper.Exists("new-key");
Console.WriteLine($"exists key ,value:{isExistsKey}");
double incrByFloat=RedisHelper.IncrByFloat("key-float", 0.1);
Console.WriteLine($"incrbyfloat key-float 0.1,value:{incrByFloat}");
}
相關文章
- csredis-in-asp.net core理論實戰-主從配置、哨兵模式RedisASP.NET模式
- RocketMQ實戰系列從理論到實戰MQ
- Tensorflow-keras 理論 & 實戰Keras
- Code Review理論與實戰 (轉)View
- 分散式事務理論加實戰分散式
- Docker最全教程——從理論到實戰(二)Docker
- Docker最全教程——從理論到實戰(一)Docker
- Docker最全教程——從理論到實戰(五)Docker
- Docker最全教程——從理論到實戰(四)Docker
- Docker最全教程——從理論到實戰(三)Docker
- Docker最全教程——從理論到實戰(六)Docker
- Docker最全教程——從理論到實戰(八)Docker
- Docker最全教程——從理論到實戰(七)Docker
- 深度解析BERT:從理論到Pytorch實戰PyTorch
- 《EJB實用原理和實戰示例》中的實戰示例問題請教
- 【實戰】oracle job + 儲存過程 的使用示例Oracle儲存過程
- Kafka實戰-簡單示例Kafka
- web3從入門到實戰-理論篇Web
- 0729 – Mark: iOS 理論學完,開始實戰iOS
- AVFoundation框架理論+實戰一(文字語音轉換)框架
- java core dump分析實戰Java
- EJB實用原理和實戰示例
- -----理論+實戰 構建完整JVM知識體系----新-----JVM
- JVM效能調優與實戰基礎理論篇-下JVM
- 文章 | 吃透 <正規表示式>(理論+多圖示例)
- EJB實用原理和實戰示例 and more?
- Core Animation實戰二(寄宿圖)
- Core Animation實戰五(變換)
- 神經網路理論與工程實戰-知識積累神經網路
- 分散式服務防雪崩熔斷器,Hystrix理論+實戰。分散式
- 快速入門——深度學習理論解析與實戰應用深度學習
- LVS+Keepalived 高可用群集(理論+實戰部署)
- 分散式系統系列(三)---Web Service實戰--CXF理論篇分散式Web
- .NET Core(.NET 6)控制檯應用程式與MongoDB Atlas入門實戰示例教程詳解MongoDB
- iOS圖形處理概論:OpenGL ES,Metal,Core Graphics,Core Image,GPUImage,OpenCV等iOSGPUUIOpenCV
- Dapr + .NET Core實戰(六)繫結
- Core Animation實戰四(視覺效果)視覺
- 偏向鎖理論太抽象,實戰了解下偏向鎖如何發生以及如何升級【實戰篇】抽象