C#中如何使用redis
redis 是一個(gè)非關(guān)系型高性能的key-value數(shù)據(jù)庫(kù)。和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。
下面介紹下,在C#中如何使用redis
1、引用 StackExchange.Redis

2、redis 工具類
public class RedisHelper
{
private static ConnectionMultiplexer multiplexer { get; set; }
static RedisHelper()
{
}
public static IDatabase GetDataBase(int dbNums = 1)
{
if (multiplexer == null)
Init();
return multiplexer.GetDatabase(dbNums);
}
public static ConnectionMultiplexer GetMultiplexer()
{
if (multiplexer == null)
Init();
return multiplexer;
}
public static bool IsConnect(string key, IDatabase redisDb, string module, string action)
{
if (!redisDb.IsConnected(key))
{
LogHelper.Error("current redis is not connect", null, module, action);
return false;
}
return true;
}
private static void Init()
{
try
{
var configString = ConfigurationManager.AppSettings["RedisConfigString"];
ConfigurationOptions options = ConfigurationOptions.Parse(configString);
multiplexer = ConnectionMultiplexer.Connect(options);
}
catch (Exception ex)
{
LogHelper.Error(ex, "RedisHelper", "Static");
}
}
}
3、常用操作
IDatabase _cacheClient = RedisHelper.GetDataBase(4);
//key是否存在
_cacheClient.KeyExists("key")
//設(shè)置key-vaule
_cacheClient.StringSet("key", "value");
//設(shè)置過(guò)期時(shí)間
_cacheClient.KeyExpire("key", TimeSpan.FromMinutes(1));
//刪除
_cacheClient.KeyDelete("key");
4、redis 雖然也可以做消息隊(duì)列,實(shí)現(xiàn)也簡(jiǎn)單,但弊端同樣明顯,不推薦
//發(fā)布
ConnectionMultiplexer multiplexer = RedisHelper.GetMultiplexer();
ISubscriber sub = multiplexer.GetSubscriber();
var queue = sub.Publish("channel name", "message");
//訂閱
ConnectionMultiplexer multiplexer = RedisHelper.GetMultiplexer();
ISubscriber sub = multiplexer.GetSubscriber();
sub.Subscribe("channel name", (channel, message) =>
{
//TODO
});
5、計(jì)數(shù)器,用于秒殺、搶購(gòu)控庫(kù)存
//取值,不存在則初始為0
long num = _cacheClient.StringIncrement("key", 0)
//判斷,比如和緩存里的商品總庫(kù)存比較
//計(jì)數(shù)增加
_cacheClient.StringIncrement("key", 2)
以上就是C#中如何使用redis的詳細(xì)內(nèi)容,更多關(guān)于C#使用redis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用C#和SerialPort類進(jìn)行實(shí)時(shí)數(shù)據(jù)采集與控制
在很多工業(yè)控制、設(shè)備監(jiān)控、傳感器數(shù)據(jù)采集等應(yīng)用場(chǎng)景中,上位機(jī)通過(guò)串口與下位機(jī)(如嵌入式設(shè)備、PLC、傳感器等)進(jìn)行實(shí)時(shí)數(shù)據(jù)采集與控制,C#提供了System.IO.Ports.SerialPort類,使得串口通信變得簡(jiǎn)單高效,本文介紹了如何使用C#和SerialPort類進(jìn)行實(shí)時(shí)數(shù)據(jù)采集與控制2025-02-02
在c#中把字符串轉(zhuǎn)為變量名并獲取變量值的小例子
這篇文章介紹了在c#中把字符串轉(zhuǎn)為變量名并獲取變量值的小例子,有需要的朋友可以參考一下2013-09-09
C#?OpenCV實(shí)現(xiàn)形狀匹配的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用C#+OpenCV實(shí)現(xiàn)形狀匹配的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09
C#多線程同步不同實(shí)現(xiàn)方式小結(jié)
本文主要介紹了C#多線程同步不同實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01

