快捷搜索:
来自 计算机编程 2019-06-17 13:26 的文章
当前位置: 67677新澳门手机版 > 计算机编程 > 正文

爬虫学习笔记

      在做到了DNS分析模块然后,作者开采到了DNS缓存机制也很有须要。在Redis,Memcache,和.Net自带的Cache之间,思索到布置难题,最后选取了后者,以前在念书Web及开荒的长河中用过System.Web.Caching.Cache.aspx)那些类库,但是此次的爬虫程序小编准备计划为桌面软件,所以选拔了System.Runtime.Caching.MemoryCache(中期如有供给也会参与System.Web.Caching.Cache来适配Web端程序)。

      MemoryCache的选取英特网介绍的相当的少,但是这些是.NET4.0新引入的缓存对象,预计首假若替换原本集团库的缓存模块,使得.NET的缓存能够无处不在,而不用基于特定的Windows版本上运用。

      出于方便记挂,咱们将不再实例化新的MemoryCache对象,只对MemoryCache的默许示例Memory.Default进行增加和删除查操作。

基础篇

增加:

图片 1

日增缓存要求提供三个参数,CacheItem类表示缓存中的单个缓存项,

构造函数:
CacheItem(String, Object, String)            用缓存项的钦赐键、值和区域早先化新的 CacheItem 实例。

多个参数分别为:键、值和区域。

CacheItemPolicy类则意味缓存项的超时音信,只包蕴暗许的构造函数。

追加一条缓存:

var item = new CacheItem("习大大", "两学一做");
var policy = new CacheItemPolicy();
policy.SlidingExpiration = new TimeSpan(500);
//插入一条key为"习大大",value为"两学一做",500毫秒后自动销毁的缓存
MemoryCache.Default.Add(item, policy);
//重新设置policy的过期时间为当前时间 十分钟
policy.AbsoluteExpiration = DateTimeOffset.Now   TimeSpan.FromMinutes(10);
//注意,如果要使用Sliding时间,则Absolute必须为DateTimeOffset.MaxValue,反之,则Sliding必须为TimeSpan.Zero
policy.SlidingExpiration = TimeSpan.Zero;
//重新插入,覆盖前一条数据
MemoryCache.Default.Add(item, policy);

注意,如果要使用Sliding时间,则Absolute必须为DateTimeOffset.MaxValue,反之,则Sliding必须为TimeSpan.Zero 

查询:

缓存对象类似于字典集,查询能够一向动用memoryCache[key]来张开,比方我们查询一下前方插入的那条数据:

var idea = MemoryCache.Default["习大大"];

移除:

图片 2

参数

key:要移除的缓存项的有一无二标记符。

regionName:缓存中的一个增多了缓存项的命名区域。不要为该参数字传送递值。暗中同意情状下,此参数为null,因为 MemoryCache 类未达成区域。

返回值
Type: System.Object  假设在缓存中找到该项,则为已移除的缓存项;不然为 null。

删去前边插足的那一项:

MemoryCache.Default.Remove("习大大");

进阶篇

了解了宗旨的用法之后,大家就足以对它做越来越包装,使之使用起来越发方便:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Caching;


namespace Crawler.Common { ///

/// 基于MemoryCache的缓存辅助类 /// public static class MemoryCacheHelper { private static readonly object _locker = new object();
public static bool Contains(string key) { return MemoryCache.Default.Contains(key); }

/// /// 获取Catch元素 /// /// 所获取的元素的类型 /// 元素的键 /// 特定的元素值 public static T Get(string key) { if (string.IsNullOr惠特eSpace(key)) throw new ArgumentException("违法的key!"); if (!MemoryCache.Default.Contains(key)) throw new ArgumentException("获取失利,不设有该key!"); if (!(MemoryCache.Default[key] is T)) throw new ArgumentException("未找到所需项目数据!"); return (T)MemoryCache.Default[key]; }
/// /// 添加Catch元素 /// /// 元素的键 /// 元素的值 /// 元素过期时间(时间间隔) /// 元素过期时间(绝对时间) /// public static bool Add(string key, object value, TimeSpan? slidingExpiration = null, DateTime? absoluteExpiration = null) { var item = new CacheItem(key, value); var policy = CreatePolicy(slidingExpiration, absoluteExpiration); lock (_locker) return MemoryCache.Default.Add(item, policy); }
/// /// 移出Cache元素 /// /// 待移出元素的类型 /// 待移除元素的键 /// 已经移出的元素 public static T Remove(string key) { if (string.IsNullOr惠特eSpace(key)) throw new ArgumentException("违法的key!"); if (!MemoryCache.Default.Contains(key)) throw new ArgumentException("获取败北,不存在该key!"); var value = MemoryCache.Default.Get(key); if (!(value is T)) throw new ArgumentException("未找到所需项目数据!"); return (T)MemoryCache.Default.Remove(key); }
/// /// 移出多条缓存数据,默认为所有缓存 /// /// 待移出的缓存类型 /// /// public static List RemoveAll(IEnumerable keyList = null) { if (keyList != null) return (from key in keyList where MemoryCache.Default.Contains(key) where MemoryCache.Default.Get(key) is T select (T)MemoryCache.Default.Remove(key)).ToList(); while (MemoryCache.Default.GetCount() > 0) MemoryCache.Default.Remove(MemoryCache.Default.ElementAt(0).Key); return new List(); }
/// /// 设置过期信息 /// /// /// /// private static CacheItemPolicy CreatePolicy(TimeSpan? slidingExpiration, DateTime? absoluteExpiration) { var policy = new CacheItemPolicy();
if (absoluteExpiration.HasValue) { policy.AbsoluteExpiration = absoluteExpiration.Value; } else if (slidingExpiration.HasValue) { policy.SlidingExpiration = slidingExpiration.Value; }
policy.Priority = CacheItemPriority.Default;
return policy; } } }

本文由67677新澳门手机版发布于计算机编程,转载请注明出处:爬虫学习笔记

关键词: