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

 

分享给朋友:
您可能感兴趣的文章:
随机阅读: