zoukankan      html  css  js  c++  java
  • c#缓存帮助类

    public static class CacheHelper
        {
            static object _lockObj = new object();
    
            private static Dictionary<string, object> _lockObjDict = new Dictionary<string, object>();
    
            /// <summary>
            /// 获取缓存,如果缓存不存在,则从 acquire 里获取
            /// 但是如果 acquire 得到的是 null,则不保存入缓存
            /// </summary>
            /// <typeparam name="TResult">缓存类型</typeparam>
            /// <param name="cacheProvider">缓存Provider</param>
            /// <param name="key">缓存Key</param>
            /// <param name="second">缓存时间</param>
            /// <param name="acquire">acquire</param>
            /// <returns>null或者缓存实例</returns>
            public static TResult GetBySeconds<TResult>(
                  this ICacheProvider cacheProvider,
                  string key,
                  int second,
                  Func<TResult> acquire)
            {
                ////缓存key不能为空,但是可以为空字符串
                if (key == null)
                {
                    throw new ArgumentNullException("参数key不能为空");
                }
    
    if (!_lockObjDict.ContainsKey(key))
                    {
                lock (_lockObj)
                {
                    if (!_lockObjDict.ContainsKey(key))
                    {
                        _lockObjDict.Add(key, new object());
                    }
                }
    }
    
                ////如果当前缓存存在则直接返回
                if (cacheProvider.IsSet(key))
                {
                    return cacheProvider.Get<TResult>(key);
                }
    
                lock (_lockObjDict[key])
                {
                    //再次检测当前缓存存在则直接返回
                    if (cacheProvider.IsSet(key))
                    {
                        return cacheProvider.Get<TResult>(key);
                    }
    
                    ////如果不存在则调用获取方法
                    var result = acquire();
                    ////如果获取到的结果为空,则不缓存
                    if (result != null)
                    {
                        cacheProvider.Set(key, result, second);
                    }
    
                    return result;
                }
            }
        }
  • 相关阅读:
    前后端分离项目本地测试跨域问题配置
    STS没有找到Dynamic Web Project
    java常见面试题
    log4jdbc 使用
    Thymeleaf 入门
    集成maven和Spring boot的profile 专题
    ftp命令大全
    windows下安装redis
    linux安装环境
    atmega328 熔丝
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/6433408.html
Copyright © 2011-2022 走看看