/// <summary> /// 获取缓存数据 /// </summary> /// <param name="key">关键字</param> /// <returns>缓存数据,失败返回null</returns> public cacheValueType TryGet(keyType key) { Monitor.Enter(counter.SqlTool.Lock); try { return(queueCache.Get(key, null)); } finally { Monitor.Exit(counter.SqlTool.Lock); } }
/// <summary> /// 根据域名获取IP地址 /// </summary> /// <param name="domain">域名</param> /// <returns>IP地址,失败返回null</returns> internal unsafe static IPAddress[] GetIPAddress(ref subArray <byte> domain) { try { fixed(byte *domainFixed = domain.UnsafeArray) { byte *domainStart = domainFixed + domain.StartIndex; unsafer.memory.ToLower(domainStart, domainStart + domain.Count); hashBytes key = domain; ipAddress value; Monitor.Enter(domainIpLock); try { value = domainIps.Get(key, default(ipAddress)); if (value.Ips != null && value.Timeout < date.NowSecond) { domainIps.Remove(key, out value); value.Ips = null; } } finally { Monitor.Exit(domainIpLock); } if (value.Ips == null) { if (value.Domain == null) { value.Domain = String.UnsafeDeSerialize(domainStart, -domain.Count); } IPAddress ip; if (IPAddress.TryParse(value.Domain, out ip)) { value.Timeout = DateTime.MaxValue; value.Domain = null; setDomainIp(key.Copy(), ref value); return(value.Ips = new IPAddress[] { ip }); } value.Ips = Dns.GetHostEntry(value.Domain).AddressList; if (value.Ips.Length != 0) { value.Timeout = date.NowSecond.AddTicks(domainIpTimeoutTicks); setDomainIp(key.Copy(), ref value); return(value.Ips); } } else { return(value.Ips); } } } catch (Exception error) { log.Default.Add(error, null, false); } return(null); }
/// <summary> /// 获取缓存数据 /// </summary> /// <param name="key">关键字</param> /// <returns>缓存数据,失败返回null</returns> public cacheValueType TryGet(keyType key) { return(queueCache.Get(key, default(cacheValueType))); }