コード例 #1
0
        /// <summary>
        /// 参数数据缓存
        /// </summary>
        /// <param name="funParam">参数</param>
        /// <param name="alCacheData">参数数据</param>
        /// <returns>成功返回1 失败返回-1</returns>
        private int AddParamDictionary(Neusoft.FrameWork.Models.CacheDataType cacheDataKey, object[] funParam, ArrayList alCacheData)
        {
            if (funParam == null || funParam.Length <= 0)
            {
                return(1);
            }

            //获取参数数据主键
            string paramKey = GetParamKey(cacheDataKey, funParam);

            //缓存参数主键
            if (this.cacheParamDataKey.ContainsKey(cacheDataKey.ToString()))
            {
                this.cacheParamDataKey[cacheDataKey.ToString()].Add(paramKey);
            }
            else
            {
                List <string> paramKeysList = new List <string>();
                paramKeysList.Add(paramKey);

                this.cacheParamDataKey.Add(cacheDataKey.ToString(), paramKeysList);
            }

            //缓存参数数据
            this.cacheParamDataPool.Add(paramKey, alCacheData);

            return(1);
        }
コード例 #2
0
        /// <summary>
        /// 判断数据是否过时
        /// </summary>
        /// <param name="cacheDataKey">数据索引</param>
        /// <returns></returns>
        private bool JudegeIsDirty(Neusoft.FrameWork.Models.CacheDataType cacheDataKey, Neusoft.FrameWork.Models.NeuCache cacheInfo)
        {
            string cacheVersion = cacheVersionPool[cacheDataKey];

            if (cacheInfo.DataVersion.ToString() == cacheVersion)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
コード例 #3
0
        /// <summary>
        /// 获取参数数据主键
        /// </summary>
        /// <param name="cacheDataKey"></param>
        /// <param name="funParam"></param>
        /// <returns></returns>
        private static string GetParamKey(Neusoft.FrameWork.Models.CacheDataType cacheDataKey, object[] funParam)
        {
            string paramKey = funParam[0].ToString();

            for (int i = 1; i < funParam.Length - 1; i++)
            {
                paramKey = "|" + funParam[i].ToString();
            }

            //建立参数主键
            paramKey = cacheDataKey.ToString() + "|" + paramKey;

            return(paramKey);
        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cacheDataKey"></param>
        /// <returns></returns>
        private ArrayList AddDictionary(Neusoft.FrameWork.Models.CacheDataType cacheDataKey, object[] funParam)
        {
            try
            {
                Neusoft.FrameWork.Management.CacheManager dataConfigManager = new Neusoft.FrameWork.Management.CacheManager();

                if (cacheRefreshingFlag.ContainsKey(cacheDataKey) == false)
                {
                    cacheRefreshingFlag.Add(cacheDataKey, true);
                }
                cacheRefreshingFlag[cacheDataKey] = true;

                //数据获取                 //添加版本信息
                string    dataVersion = "";
                ArrayList cacheTemp   = dataConfigManager.LoadCacheData(cacheDataKey, funParam, out dataVersion);
                if (cacheTemp == null)
                {
                    this.error = dataConfigManager.Err;
                    return(null);
                }

                //对于参数数据 只需添加首次数据即可
                if (cacheDataPool.ContainsKey(cacheDataKey) == false)
                {
                    cacheDataPool.Add(cacheDataKey, cacheTemp);

                    cacheVersionPool.Add(cacheDataKey, dataVersion);
                }

                //缓存参数数据
                if (funParam != null)
                {
                    if (this.AddParamDictionary(cacheDataKey, funParam, cacheTemp) == -1)
                    {
                        return(null);
                    }
                }

                return(cacheTemp);
            }
            catch (Exception e)
            {
                error = e.Message;
                return(null);
            }
            finally
            {
                cacheRefreshingFlag[cacheDataKey] = false;
            }
        }
コード例 #5
0
        /// <summary>
        /// 移除参数数据缓存
        /// </summary>
        /// <param name="cacheDataKey"></param>
        /// <returns></returns>
        private int RemoveParamDictionary(Neusoft.FrameWork.Models.CacheDataType cacheDataKey)
        {
            if (this.cacheParamDataKey.ContainsKey(cacheDataKey.ToString()))
            {
                //根据参数主键移除所有缓存数据
                foreach (string strParamKey in this.cacheParamDataKey[cacheDataKey.ToString()])
                {
                    this.cacheParamDataPool.Remove(strParamKey);
                }
                //移除主数据主键移除所有参数主键
                this.cacheParamDataKey.Remove(cacheDataKey.ToString());
            }

            return(1);
        }
コード例 #6
0
        /// <summary>
        /// 移除缓存数据
        /// </summary>
        /// <param name="cacheDataKey"></param>
        /// <returns></returns>
        public int RemoveDictionary(Neusoft.FrameWork.Models.CacheDataType cacheDataKey)
        {
            if (cacheDataPool.ContainsKey(cacheDataKey))
            {
                ArrayList cacheData = cacheDataPool[cacheDataKey];

                cacheDataPool.Remove(cacheDataKey);

                cacheVersionPool.Remove(cacheDataKey);

                cacheData = null;

                this.RemoveParamDictionary(cacheDataKey);
            }

            return(1);
        }
コード例 #7
0
        /// <summary>
        /// 获取缓存数据
        /// </summary>
        /// <param name="cacheDataKey">数据索引</param>
        /// <param name="funParam">函数参数</param>
        /// <param name="t">数据类型</param>
        /// <returns>成功返回Byte数据</returns>
        public byte[] GetCacheData(Neusoft.FrameWork.Models.CacheDataType cacheDataKey, object[] funParam, Type t)
        {
            ArrayList alCacheData = this.GetDictionary(cacheDataKey, funParam, t);

            if (alCacheData == null)
            {
                return(null);
            }

            try
            {
                return(Neusoft.FrameWork.Function.Serialize.Serialization(alCacheData));
            }
            catch (Exception e)
            {
                this.error = e.Message + "\n" + e.InnerException;
                return(null);
            }
        }
コード例 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cacheDataKey"></param>
        /// <param name="funParam"></param>
        /// <returns></returns>
        private ArrayList GetDictionaryFromCache(Neusoft.FrameWork.Models.CacheDataType cacheDataKey, object[] funParam)
        {
            if (funParam == null || funParam.Length <= 0)
            {
                return(cacheDataPool[cacheDataKey]);
            }
            else
            {
                string paramKey = GetParamKey(cacheDataKey, funParam);

                if (cacheParamDataPool.ContainsKey(paramKey))
                {
                    return(cacheParamDataPool[paramKey]);
                }
                else
                {
                    return(null);
                }
            }
        }
コード例 #9
0
ファイル: Function.cs プロジェクト: ewin66/Management-System
        /// <summary>
        /// 获取缓存数据
        ///
        /// ErrCode=NoDataFound       未维护数据
        /// ErrCode=NoManagmentFound  未维护数据提取信息
        /// ErrCode=PauseCache        暂停了缓存处理
        /// ErrCode=MisMatch          需要的数据类型与缓存数据类别不匹配
        ///
        /// </summary>
        /// <param name="cacheKey">数据索引</param>
        /// <param name="param">参数数组</param>
        /// <param name="t">数据类型</param>
        /// <returns></returns>
        public static ArrayList GetDictionary(Neusoft.FrameWork.Models.CacheDataType cacheKey, string[] param, Type t)
        {
            ArrayList alCacheData = CacheServer.GetDictionary(cacheKey, param, t);

            if (alCacheData == null)
            {
                err     = CacheServer.Error;
                errCode = CacheServer.ErrCode;
            }

            return(alCacheData);

            //序列化 效率不是很高 以下方法屏蔽
            //byte[] compressbyte = CacheServer.GetCacheData(cacheKey, null, t);
            //if (compressbyte == null)
            //{
            //    return null;
            //}

            //return (ArrayList)Neusoft.FrameWork.Function.Serialize.DeSerialization(compressbyte);
        }
コード例 #10
0
ファイル: Function.cs プロジェクト: ewin66/Management-System
 /// <summary>
 /// 获取缓存数据
 ///
 /// ErrCode=NoDataFound       未维护数据
 /// ErrCode=NoManagmentFound  未维护数据提取信息
 /// ErrCode=PauseCache        暂停了缓存处理
 /// ErrCode=MisMatch          需要的数据类型与缓存数据类别不匹配
 ///
 /// </summary>
 /// <param name="dictionaryKey"></param>
 /// <returns></returns>
 public static ArrayList GetDictionary(Neusoft.FrameWork.Models.CacheDataType cacheKey, Type t)
 {
     return(GetDictionary(cacheKey, null, t));
 }
コード例 #11
0
        /// <summary>
        /// 获取缓存数据
        ///
        /// ErrCode=NoDataFound       未维护数据
        /// ErrCode=NoManagmentFound  未维护数据提取信息
        /// ErrCode=PauseCache        暂停了缓存处理
        /// ErrCode=MisMatch          需要的数据类型与缓存数据类别不匹配
        ///
        /// </summary>
        /// <param name="cacheDataKey">数据索引</param>
        /// <param name="funParam">函数参数</param>
        /// <param name="t">数据类型</param>
        /// <returns>成功返回ArrayList数据</returns>
        public ArrayList GetDictionary(Neusoft.FrameWork.Models.CacheDataType cacheDataKey, object[] funParam, Type t)
        {
            //如果当前正在进行数据刷新则等待完成
            while (cacheRefreshingFlag.ContainsKey(cacheDataKey) && cacheRefreshingFlag[cacheDataKey])
            {
                continue;
            }

            this.error   = string.Empty;
            this.errCode = string.Empty;
            //有效性判断 根据ErrCode返回不同错误情况
            Neusoft.FrameWork.Management.CacheManager dataConfigManager = new Neusoft.FrameWork.Management.CacheManager();
            Neusoft.FrameWork.Models.NeuCache         cacheInfo         = dataConfigManager.GetCacheConfig(cacheDataKey);
            if (cacheInfo == null)
            {
                this.error   = dataConfigManager.Err;
                this.errCode = dataConfigManager.ErrCode;
                return(null);
            }


            bool isRefreshData = true;

            if (cacheDataPool.ContainsKey(cacheDataKey))
            {
                #region 校验缓存数据是否过时

                //校验缓存数据是否过时
                bool isDirtyData = this.JudegeIsDirty(cacheDataKey, cacheInfo);
                if (isDirtyData)
                {
                    this.RemoveDictionary(cacheDataKey);
                }
                else
                {
                    isRefreshData = false;
                }

                #endregion
            }

            //获取参数缓存数据
            if (isRefreshData == false && funParam != null && funParam.Length > 0)
            {
                ArrayList cacheData = this.GetDictionaryFromCache(cacheDataKey, funParam);
                if (cacheData == null)
                {
                    //参数缓存数据不存在 仍需要刷新
                    isRefreshData = true;
                }
                else
                {
                    if (cacheData != null && cacheData.Count > 0 && cacheData[0].GetType() != t)
                    {
                        error   = "缓存数据类型不匹配";
                        errCode = "MisMatch";
                        return(null);
                    }

                    return(cacheData);
                }
            }

            if (isRefreshData == false)     //不需要重新刷新数据
            {
                #region 由缓存内获取数据内

                ArrayList cacheData = cacheDataPool[cacheDataKey];
                if (cacheData.Count > 0 && cacheData[0].GetType() != t)
                {
                    error   = "缓存数据类型不匹配";
                    errCode = "MisMatch";
                    return(null);
                }

                return(cacheData);

                #endregion
            }
            else
            {
                //根据cacheDataKey获取数据并加入缓存
                ArrayList cacheData = AddDictionary(cacheDataKey, funParam);
                if (cacheData == null)
                {
                    return(null);
                }

                return(cacheData);
            }
        }