最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)封裝常用Redis工具類的示例代碼

 更新時(shí)間:2024年03月05日 10:20:10   作者:搬磚的詩(shī)人Z  
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)封裝常用Redis工具類的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.請(qǐng)先安裝CSRedisCore

接口:

namespace Tools.Redis
{
    public interface IRedisTool
    {
        bool SetLongValue(string key, string value);
        bool SetValue(string key, string value, int outSecond);
        bool SetValue(string key, string value);
        bool Exists(string key);
        bool UpdateValue(string key, string value);
        string? GetValue(string key);
        T? GetValue<T>(string key);
        T? GetEntity<T>(string key);
        List<T>? GetLike<T>(string key);
        void DeleteKey(string key);
        void DeleteLike(string key);

    }
}

實(shí)現(xiàn)接口方法

using CSRedis;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tools.Redis
{
    public class RedisTool : IRedisTool
    {
        CSRedisClient csRedis;

        public RedisTool(string redisConfig)
        {
            csRedis = new CSRedisClient(redisConfig);
            RedisHelper.Initialization(csRedis);
        }

        /// <summary>
        /// 設(shè)置長(zhǎng)時(shí)間存在的值
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetLongValue(string key, string value)
        {
            try
            {
                csRedis.Set(key, value);
                return true;
            }
            catch (Exception ex)
            {
                NLogHelper.Error("RedisDataHelper-SetValue" + ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 設(shè)置值,并設(shè)置清除時(shí)間
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="outSecond"></param>
        /// <returns></returns>
        public bool SetValue(string key, string value, int outSecond)
        {
            try
            {
                csRedis.Set(key, value, outSecond);
                return true;
            }
            catch (Exception ex)
            {
                NLogHelper.Error("RedisDataHelper-SetValue" + ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 設(shè)置值,存在則覆蓋,并沿用之前的清除時(shí)間
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetValue(string key, string value)
        {
            try
            {
                if (csRedis.Exists(key))
                {
                    long time = csRedis.Ttl(key);
                    csRedis.Set(key, value, Convert.ToInt32(time));
                }
                else
                    csRedis.Set(key, value);

                return true;
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-SetValue[{key}-{value}]" + ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 是否存在key
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Exists(string key)
        {
            try
            {
                return csRedis.Exists(key);
            }
            catch (Exception ex)
            {
                NLogHelper.Error("RedisDataHelper-KeyExists" + ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 更新Key,把自動(dòng)注銷時(shí)間設(shè)置為原來(lái)的key的時(shí)間,不存在返回false
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool UpdateValue(string key, string value)
        {
            try
            {
                if (csRedis.Exists(key))
                {
                    long time = csRedis.Ttl(key);
                    csRedis.Set(key, value, Convert.ToInt32(time));
                    return true;
                }
                return false;
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-SetValue[{key}-{value}]" + ex.Message);
                return false;
            }
        }


        public string? GetValue(string key)
        {
            try
            {
                return csRedis.Get(key);
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-GetValue[{key}]" + ex.Message);
                return null;
            }
        }

        /// <summary>
        /// 獲得json序列化后的
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T? GetValue<T>(string key)
        {
            try
            {
                var data = csRedis.Get(key);
                return JsonConvert.DeserializeObject<T>(data);
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-GetValue[{key}]" + ex.Message);
                return default;
            }
        }

        public T? GetEntity<T>(string key)
        {
            try
            {
                var data = csRedis.Get(key);
                return JsonConvert.DeserializeObject<T>(data);
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-GetList[{key}]" + ex.Message);
                return default;
            }
        }

        public List<T>? GetLike<T>(string key)
        {
            try
            {
                var dataList = csRedis.Keys(key + "*");
                List<T> list = new List<T>();
                foreach (string item in dataList)
                {
                    var data = GetEntity<T>(item);
                    if (data != null)
                    {
                        list.Add(data);
                    }
                }
                return list;
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-GetList[{key}]" + ex.Message);
                return default;
            }
        }

        public void DeleteKey(string key)
        {
            try
            {
                csRedis.Del(key);
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-DeleteKey[{key}]" + ex.Message);
            }
        }

        public void DeleteLike(string key)
        {
            try
            {
                var dataList = csRedis.Keys(key + "*");

                foreach (string item in dataList)
                {
                    DeleteKey(item);
                }
            }
            catch (Exception ex)
            {
                NLogHelper.Error($"RedisDataHelper-DeleteLike[{key}]" + ex.Message);
            }
        }


        private bool AcquireLock(string lockKey, string lockValue, int lockTimeoutSeconds)
        {
            // 嘗試獲取鎖
            bool lockAcquired = csRedis.SetNx(lockKey, lockValue);

            // 如果成功獲取鎖,設(shè)置鎖的超時(shí)時(shí)間
            if (lockAcquired)
            {
                csRedis.Expire(lockKey, lockTimeoutSeconds);
            }

            return lockAcquired;
        }

        private void ReleaseLock(string lockKey, string lockValue)
        {
            // 釋放鎖
            // 使用 Lua 腳本確保只有持有鎖的客戶端才能釋放鎖
            string luaScript = @"
            if redis.call('get', KEYS[1]) == ARGV[1] then
                return redis.call('del', KEYS[1])
            else
                return 0
            end";

            csRedis.Eval(luaScript, lockKey, new[] { lockValue });
        }
    }
}

以上就是C#實(shí)現(xiàn)封裝常用Redis工具類的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C#封裝常用Redis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# HttpClient上傳文件并附帶其它參數(shù)方式

    C# HttpClient上傳文件并附帶其它參數(shù)方式

    這篇文章主要介紹了C# HttpClient上傳文件并附帶其它參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • WPF使用DrawingContext實(shí)現(xiàn)繪制刻度條

    WPF使用DrawingContext實(shí)現(xiàn)繪制刻度條

    這篇文章主要為大家詳細(xì)介紹了如何利用WPF DrawingContext實(shí)現(xiàn)繪制刻度條,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-09-09
  • C#根據(jù)時(shí)間加密和防止反編譯的兩種方案

    C#根據(jù)時(shí)間加密和防止反編譯的兩種方案

    文章介紹了兩種C#時(shí)間加密方法(時(shí)間戳+AES加密和時(shí)間校驗(yàn)加密)以及防反編譯步驟(代碼混淆和加殼保護(hù)),并強(qiáng)調(diào)了時(shí)間加密使用UTC時(shí)間和混淆與加殼的重要性,需要的朋友可以參考下
    2026-01-01
  • 舉例講解C#中自動(dòng)實(shí)現(xiàn)的屬性

    舉例講解C#中自動(dòng)實(shí)現(xiàn)的屬性

    這篇文章主要介紹了C#中自動(dòng)實(shí)現(xiàn)的屬性,包括使用自動(dòng)實(shí)現(xiàn)的屬性實(shí)現(xiàn)輕量類的方法,需要的朋友可以參考下
    2016-01-01
  • C#擴(kuò)展方法實(shí)例分析

    C#擴(kuò)展方法實(shí)例分析

    這篇文章主要介紹了C#擴(kuò)展方法,結(jié)合實(shí)例形式分析了C#擴(kuò)展方法的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • 基于C#實(shí)現(xiàn)員工IC卡的讀寫功能

    基于C#實(shí)現(xiàn)員工IC卡的讀寫功能

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)讀寫員工IC卡的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • Unity工具類之生成文本驗(yàn)證碼

    Unity工具類之生成文本驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了Unity工具類之生成文本驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • c# 數(shù)據(jù)庫(kù)的 sql 參數(shù)封裝類的編寫

    c# 數(shù)據(jù)庫(kù)的 sql 參數(shù)封裝類的編寫

    c# 數(shù)據(jù)庫(kù)的 sql 參數(shù)封裝類的編寫...
    2007-12-12
  • 將C#項(xiàng)目打包為單一exe的完整指南

    將C#項(xiàng)目打包為單一exe的完整指南

    在部署 C# 桌面應(yīng)用(如 WinForms、WPF 或控制臺(tái)程序)時(shí),我們常常面對(duì)一堆 .dll 文件——這不僅影響用戶體驗(yàn),還容易導(dǎo)致依賴丟失或版本混亂,所以本文將手把手教你如何將C#項(xiàng)目打包為單一exe,需要的朋友可以參考下
    2025-12-12
  • C#異常處理的一些經(jīng)驗(yàn)和技巧

    C#異常處理的一些經(jīng)驗(yàn)和技巧

    本文是異常處理經(jīng)驗(yàn)性的文章,其實(shí)跟C#關(guān)系也不大。比較適合剛剛熟悉異常語(yǔ)法,而缺乏實(shí)戰(zhàn)的讀者。當(dāng)然,經(jīng)驗(yàn)老練的讀者也可指出不足、給予意見(jiàn)、補(bǔ)充說(shuō)明,一起完善文章,分享更多知識(shí)與經(jīng)驗(yàn)
    2014-03-03

最新評(píng)論

兴国县| 罗田县| 玉溪市| 九江县| 宾阳县| 定日县| 司法| 九寨沟县| 南靖县| 凌海市| 长白| 黄龙县| 新宾| 张家界市| 嘉祥县| 屏南县| 霍城县| 内黄县| 炎陵县| 莱西市| 阆中市| 通山县| 宜君县| 岢岚县| 汉源县| 陇西县| 固始县| 朝阳区| 义马市| 黄石市| 宁蒗| 孟州市| 阜新| 望江县| 红桥区| 阳高县| 拉孜县| 铜陵市| 金华市| 昌宁县| 山东省|