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

 

转载于:https://www.cnblogs.com/xiaoxiaocainia/p/5706912.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 提供了多种本地缓存的解决方案,其比较常用的是 Spring Cache。 Spring Cache 是 Spring Framework 提供的缓存抽象层,它可以与多个缓存实现进行集成,包括常见的 Ehcache、Redis、Caffeine 等。通过使用 Spring Cache,我们可以在应用方便地添加缓存功能,提升系统性能和响应速度。 下面是使用 Spring Cache 的基本步骤: 1. 在 Spring Boot 项目的 pom.xml 文件添加所需的缓存实现库的依赖,例如 Ehcache、Redis 或 Caffeine。 2. 在应用的配置文件(application.properties 或 application.yml)配置缓存相关的属性,如缓存型、缓存过期时间等。 3. 在需要添加缓存方法使用 `@Cacheable` 注解。该注解标识方法的返回值可以被缓存,当再次调用该方法时,如果参数相同且缓存存在对应的结果,则直接返回缓存的数据,而不执行方法体内的逻辑。 4. 可以使用 `@CachePut` 注解来更新缓存,它会在方法执行后将返回值放入缓存。 5. 使用 `@CacheEvict` 注解可以从缓存删除某个键的数据,可以指定要删除的键或清空整个缓存。 6. 可以通过在方法使用 `@CacheConfig` 注解来统一配置缓存公共属性,如缓存名称、缓存管理器等。 需要注意的是,使用 Spring Cache 需要提前配置好所需的缓存实现,例如在使用 Ehcache 时需要编 Ehcache 的配置文件,或者在使用 Redis 时需要配置 Redis 的连接信息。 以上是关于 Spring Boot 本地缓存的简要介绍,更详细的配置和使用方法可以参考 Spring Boot 和 Spring Cache 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值