示例#1
0
 /// <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); }
 }
示例#2
0
        /// <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);
        }
示例#3
0
 /// <summary>
 /// 获取缓存数据
 /// </summary>
 /// <param name="key">关键字</param>
 /// <returns>缓存数据,失败返回null</returns>
 public cacheValueType TryGet(keyType key)
 {
     return(queueCache.Get(key, default(cacheValueType)));
 }