Ejemplo n.º 1
0
        /// <summary>
        /// 获取多个对象
        /// </summary>
        /// <param name="objIds"></param>
        /// <returns></returns>
        public override IDictionary <string, object> GetObjects(IList <string> objIds)
        {
            lock (lockObject)
            {
                var objIdList = new List <string>(objIds);
                objIdList = objIdList.ConvertAll <string>(objId => GetInputKey(objId));
                objIdList = (from item in objIdList select item).Distinct().ToList();

                IDictionary <string, object> cacheData = new Dictionary <string, object>();

                var data = dataCache.MultiGet(objIdList);
                if (data != null)
                {
                    foreach (KeyValuePair <string, byte[]> kv in data)
                    {
                        if (kv.Value != null)
                        {
                            cacheData.Add(GetOutputKey(kv.Key), Serialization.BinaryDeSerialize <object>(kv.Value));
                        }
                        else
                        {
                            cacheData.Add(GetOutputKey(kv.Key), null);
                        }
                    }
                }

                return(cacheData);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 여러 개의 항목을 캐시에서 가져옵니다.
        /// </summary>
        /// <param name="sharedCache"></param>
        /// <param name="keys"></param>
        /// <param name="items"></param>
        /// <returns></returns>
        public static bool TryMultiGet(this IndexusProviderBase sharedCache, IEnumerable <string> keys,
                                       out IDictionary <string, byte[]> items)
        {
            items = null;
            if (keys.IsEmptySequence())
            {
                return(false);
            }

            try {
                if (IsDebugEnabled)
                {
                    log.Debug("캐시 시스템에서 다중 정보를 로드합니다... items key=[{0}]", keys.CollectionToString());
                }

                items = sharedCache.MultiGet(keys.ToList());

                if (IsDebugEnabled)
                {
                    log.Debug("캐시 시스템에 다중 정보를 로드했습니다!!!");
                }

                return(true);
            }
            catch (Exception ex) {
                if (log.IsWarnEnabled)
                {
                    log.Warn("캐시에 여러 값을 로드하는데 실패했습니다. 예외는 무시합니다^^");
                    log.Warn(ex);
                }
            }
            return(false);
        }