Redis緩存公共方法類


Redis緩存公共方法類

Config配置文件:

    <!--Redis相關設置-->
    <!--是否打開緩存1是0否-->
    <add key="IsOpenCache" value="1" />
    <!--redis IP地址-->
    <add key="RedisIP" value="192.168.1.1" />
    <!--redis端口(不填默認6379)-->
    <add key="RedisPort" value="6379" />
    <!--redis密碼(不填表示沒有密碼)-->
    <add key="RedisPassword" value="@123456" />
    <!--redis庫索引號(整數,默認有5個庫,從0開始,不填表示0)-->
    <add key="RedisDb" value="2" />
    <!--Redis相關設置結束  -->
    <add key="ClientSettingsProvider.ServiceUri" value="" />
View Code

 

RedisHelper:

using System;
using System.Collections.Generic;
using System.Text;
using ServiceStack.Redis;

public class RedisHelper
{
    private static object lockobj = new object();
    /// <summary>
    /// 加入緩存
    /// </summary>
    /// <typeparam name="T">對象類型</typeparam>
    /// <param name="cacheKey">Key(鍵值命名規范:RK_字段名_表名_條件字段1_值_條件字段n_值......,鍵值全部小寫,表名不加dbo前綴)</param>
    /// <param name="obj">對象</param>
    /// <param name="expiresAt">緩存時間(除了XianZhiAccounts的過期時間為一小時,其余的過期時間都為兩天)</param>
    /// <returns>是否緩存成功</returns>
    public static bool Set<T>(string cacheKey, T obj, DateTime expiresAt)
    {
        bool result = false;
        lock (lockobj)
        {
            try
            {
                if (IsOpenCache)
                {
                    if (!(obj is System.Data.DataTable) || !(obj is System.Data.DataSet) || !(obj is System.Data.DataRow))
                    {
                        using (IRedisClient Redis = prcm.GetClient())
                        {
                            result = Redis.Set<T>(cacheKey, obj, expiresAt);
                        }
                    }
                }
            }
            catch { }
        }
        return result;
    }

    /// <summary>
    /// 加入緩存(永久緩存)
    /// </summary>
    /// <typeparam name="T">對象類型</typeparam>
    /// <param name="cacheKey">Key(鍵值命名規范:RK_字段名_表名_條件字段1_值_條件字段n_值......,鍵值全部小寫)</param>
    /// <param name="obj">對象</param>
    /// <returns>是否緩存成功</returns>
    private static bool Set<T>(string cacheKey, T obj)
    {
        lock (lockobj)
        {
            try
            {
                if (!IsOpenCache) return false;
                return Set<T>(cacheKey, obj, DateTime.Now.AddYears(100));
            }
            catch { return false; }
        }
    }

    /// <summary>
    /// 獲取緩存內容
    /// </summary>
    /// <param name="cacheKey">Key</param>
    /// <returns></returns>
    public static T Get<T>(string cacheKey)
    {
        lock (lockobj)
        {
            try
            {
                if (!IsOpenCache) return default(T);
                using (IRedisClient Redis = prcm.GetClient())
                {
                    return Redis.Get<T>(cacheKey);
                }
            }
            catch
            {
                string str = string.Empty;
                return default(T);
            }
        }
    }


    /// <summary>
    /// 刪除緩存
    /// </summary>
    /// <param name="cacheKey">Key</param>
    /// <returns></returns>
    public static bool Del(string cacheKey)
    {
        try
        {
            if (!IsOpenCache) return false;
            using (IRedisClient Redis = prcm.GetClient())
            {
                return Redis.Remove(cacheKey);
            }
        }
        catch { return false; }
    }

    /// <summary>
    /// 批量刪除緩存
    /// </summary>
    /// <param name="cacheKeys">Key</param>
    /// <returns></returns>
    public static void Del(List<string> cacheKeys)
    {
        try
        {
            if (!IsOpenCache) return;
            using (IRedisClient Redis = prcm.GetClient())
            {
                Redis.RemoveAll(cacheKeys);
            }
        }
        catch { return; }
    }

    /// <summary>
    /// 清空緩存
    /// </summary>
    public static void ClearCache()
    {
        try
        {
            if (!IsOpenCache) return;
            using (IRedisClient Redis = prcm.GetClient())
            {
                Redis.FlushAll();
            }
        }
        catch { return; }
    }



    #region 私有方法

    private static string RedisIP = ConfigHelper.GetAppSettingValue("RedisIP");
    private static string RedisPassword = ConfigHelper.GetAppSettingValue("RedisPassword");
    private static int RedisPort = _51Sole.DJG.Common.DataConvert.ToInt(ConfigHelper.GetAppSettingValue("RedisIP"), 6379);
    private static int DbIndex = _51Sole.DJG.Common.DataConvert.ToInt(ConfigHelper.GetAppSettingValue("RedisDb"), 2);

    private static PooledRedisClientManager prcm = CreateManager(
        new string[] { "" + RedisPassword + "@" + RedisIP + ":" + RedisPort + " " },
        new string[] { "" + RedisPassword + "@" + RedisIP + ":" + RedisPort + " " });

    private static PooledRedisClientManager CreateManager(string[] readWriteHosts, string[] readOnlyHosts)
    {
        // 支持讀寫分離,均衡負載 
        RedisClientManagerConfig clientConfig = new RedisClientManagerConfig();

        clientConfig.MaxWritePoolSize = 10000;
        clientConfig.MaxReadPoolSize = 10000;
        clientConfig.AutoStart = true;
        clientConfig.DefaultDb = DbIndex;
        
        PooledRedisClientManager clientManager = new PooledRedisClientManager(readWriteHosts, readOnlyHosts, clientConfig);
        return clientManager;
    }

    /// <summary>
    /// 是否使用緩存開關
    /// </summary>
    private static bool IsOpenCache
    {
        get
        {
            if (ConfigHelper.GetAppSettingValue("IsOpenCache") != "1") return false;
            return true;
        }
    }

    #endregion
}
View Code

 

ConfigHelper:

/// <summary>
/// Redis配置文件幫助類
/// </summary>
public class ConfigHelper
{

    #region 配置文件讀取


    public static string GetAppSettingValue(string key)
    {
        try
        {
            return System.Configuration.ConfigurationManager.AppSettings[key];
        }
        catch
        {
            return string.Empty;
        }
    }

    #endregion

}
View Code

 

TypeConverter:

using System;
using System.Globalization;

public class TypeConverter
{

    /// <summary>
    /// 轉換為int類型
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="defaultValue">返回的默認值</param>
    /// <param name="numStyle">數字格式</param>
    /// <returns></returns>
    public static int ConvertToInt(object obj, NumberStyles numStyle)
    {
        int result = 0;
        if (obj != null && obj != DBNull.Value)
        {
            if (!int.TryParse(obj.ToString().Trim(), numStyle, null, out result))
            {
                result = 0;
            }
        }
        return result;

    }
    /// <summary>
    /// 轉換為int類型
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="defaultValue">返回的默認值</param>
    /// <returns></returns>
    public static int ConvertToInt(object obj)
    {
        return ConvertToInt(obj, NumberStyles.Number);
    }
}
View Code

 

添加緩存方法:

string keyWord = "TestRedis";
string cacheKey_keyWord = "RK_RedisCache_KeyWord_" + keyWord;
string cacheKey_Data = "RK_RedisCache_Data_" + keyWord;

 RedisHelper.Set<string>(cacheKey_keyWord, "此處放緩存值", DateTime.Now.AddDays(5));//有效期
View Code

 


免責聲明!

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



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