redis在C#中的使用


redis 是一個非關系型高性能的key-value數據庫。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了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");
            }
        }
    }
View Code

 

3、常用操作

IDatabase _cacheClient = RedisHelper.GetDataBase(4);
//key是否存在
_cacheClient.KeyExists("key")
//設置key-vaule
_cacheClient.StringSet("key", "value");
//設置過期時間
_cacheClient.KeyExpire("key", TimeSpan.FromMinutes(1));
//刪除
_cacheClient.KeyDelete("key");

4、redis 雖然也可以做消息隊列,實現也簡單,但弊端同樣明顯,不推薦

//發布
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、計數器,用於秒殺、搶購控庫存

//取值,不存在則初始為0
long num = _cacheClient.StringIncrement("key", 0)

//判斷,比如和緩存里的商品總庫存比較

//計數增加
_cacheClient.StringIncrement("key", 2)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM