sitecore 缓存管理器
namespace XXX.Shared.Infrastructure.Caching
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Caching;
using System.Threading;
using Sitecore.Data;
using Sitecore.Diagnostics;
using Sitecore.Sites; /// <summary>
/// The cache manager.
/// </summary>
public sealed class CacheManager
{
#region Static Fields private static readonly Lazy<CacheManager> Instance = new Lazy<CacheManager>(() => new CacheManager(), LazyThreadSafetyMode.ExecutionAndPublication); private static readonly object SyncLock = new object(); #endregion #region Fields private readonly ObjectCache cache = MemoryCache.Default; #endregion #region Public Properties /// <summary>
/// Gets the current.
/// </summary>
public static CacheManager Current
{
get { return Instance.Value; }
} #endregion #region Public Methods and Operators /// <summary>
/// The add.
/// </summary>
/// <param name="key">
/// The key.
/// </param>
/// <param name="data">
/// The data.
/// </param>
/// <param name="expiryTimeInHours">
/// </param>
/// <typeparam name="T">
/// </typeparam>
public void Add<T>(string key, T data, double expiryTimeInHours = ) where T : class
{
try
{
if (data == null)
{
throw new ArgumentNullException("data", "Cannot add null to the cache.");
} lock (SyncLock)
{
var policy = new CacheItemPolicy
{
AbsoluteExpiration = DateTime.Now.AddHours(expiryTimeInHours),
Priority = CacheItemPriority.Default,
SlidingExpiration = TimeSpan.Zero
}; this.cache.Add(key, data, policy);
}
}
catch (Exception ex)
{
Log.Debug(ex.Message, this);
}
} /// <summary>
/// The contains key.
/// </summary>
/// <param name="key">
/// The key.
/// </param>
/// <returns>
/// The <see cref="bool"/>.
/// </returns>
public bool ContainsKey(string key)
{
lock (SyncLock)
{
return this.cache.Contains(key);
}
} /// <summary>
/// The get.
/// </summary>
/// <param name="key">
/// The key.
/// </param>
/// <typeparam name="T">
/// </typeparam>
/// <returns>
/// The <see cref="T"/>.
/// </returns>
public T Get<T>(string key) where T : class
{
lock (SyncLock)
{
return this.ContainsKey(key) ? this.cache.Get(key) as T : default(T);
}
} /// <summary>
/// The get all cache keys.
/// </summary>
/// <returns>
/// The <see cref="IEnumerable{T}"/>.
/// </returns>
public IEnumerable<string> GetAllCacheKeys()
{
return this.cache.Select(item => item.Key).ToList();
} /// <summary>
/// The purge.
/// </summary>
public void Purge()
{
lock (SyncLock)
{
var keys = this.cache.Select(item => item.Key); keys.ToList().ForEach(this.Remove);
}
} /// <summary>
/// The remove.
/// </summary>
/// <param name="key">
/// The key.
/// </param>
public void Remove(string key)
{
lock (SyncLock)
{
if (!this.ContainsKey(key))
{
return;
} this.cache.Remove(key);
}
} public void RemoveSitecoreItemCache(string id, string siteName)
{
if (!string.IsNullOrEmpty(id) && !string.IsNullOrEmpty(siteName))
{
using (new SiteContextSwitcher(SiteContextFactory.GetSiteContext(siteName)))
{
var db = SiteContext.Current.Database; if (db != null)
{
db.Caches.ItemCache.RemoveItem(new ID(id)); db.Caches.DataCache.RemoveItemInformation(new ID(id)); db.Caches.StandardValuesCache.RemoveKeysContaining(id);
}
}
}
} /// <summary>
/// The remove by prefix.
/// </summary>
/// <param name="prefix">
/// The prefix.
/// </param>
public void RemoveByPrefix(string prefix)
{
lock (SyncLock)
{
var keys = this.cache.Where(item => item.Key.IndexOf(prefix, StringComparison.OrdinalIgnoreCase) != -); keys.ToList().ForEach(item => this.Remove(item.Key));
}
} #endregion
}
}
sitecore 缓存管理器的更多相关文章
- 自定义缓存管理器 或者 Spring -- cache
Spring Cache 缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 c ...
- SpringMVC + Mybatis + Shiro + ehcache时缓存管理器报错。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' ...
- [转载]挂接缓存管理器CcMapData()实现文件XX
原作者Azy,发表于DebugMan论坛. ======================================================= 这个方法的最大好处在于简单~~不用分别处理~ ...
- Spring自定义缓存管理及配置Ehcache缓存
spring自带缓存.自建缓存管理器等都可解决项目部分性能问题.结合Ehcache后性能更优,使用也比较简单. 在进行Ehcache学习之前,最好对Spring自带的缓存管理有一个总体的认识. 这篇文 ...
- Apache-Shiro+Zookeeper系统集群安全解决方案之缓存管理
上篇[Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理],解决了Shiro在系统集群开发时安全的会话共享问题,系统在使用过程中会有大量的权限检查和用户身份检验动作,为了不频繁 ...
- HTTP属性管理器详解
1)HTTP Cache Manager 2)HTTP Cookie 管理器 3)HTTP 信息头管理器 4)HTTP 授权管理器 5)HTTP 请求默认值 为什么会有这些http属性的配置元件? ...
- shiro缓存管理
一. 概述 Shiro作为一个开源的权限框架,其组件化的设计思想使得开发者可以根据具体业务场景灵活地实现权限管理方案,权限粒度的控制非常方便.首先,我们来看看Shiro框架的架构图:从上图我们可以很清 ...
- [Abp 源码分析]八、缓存管理
0.简介 缓存在一个业务系统中十分重要,常用的场景就是用来储存调用频率较高的数据.Abp 也提供了一套缓存机制供用户使用,在使用 Abp 框架的时候可以通过注入 ICacheManager 来新建/设 ...
- HTTP属性管理器 初探
1)HTTP Cache Manager 2)HTTP Cookie 管理器 3)HTTP 信息头管理器 4)HTTP 授权管理器 5)HTTP 请求默认值 为什么会有这些http属性的配置元件? ...
随机推荐
- TF54000: 由于服务器时钟设置可能不正确,无法更新数据解决方案(补充)
此问题出现的原因: 服务器时间比本地时间大.由于TFS源代码的Source Control会根据签入时间做判断.如果后续签入的时间小于变更集的最新版本的时间,就会报错误“TF54000”,并拒绝签入. ...
- pytest框架 里 fixture 参数化的方法
- Android图片高斯模糊的一些方法
高斯模糊 高斯模糊就是将指定像素变换为其与周边像素加权平均后的值,权重就是高斯分布函数计算出来的值. 一种实现 点击打开链接<-这里是一片关于高斯模糊算法的介绍,我们需要首先根据高斯分布函数计算 ...
- Pthreads 环境配置,VisualStudio
▶ Visual Studio 下配置MPI环境 ● 下载 Pthreads(http://pthreads.org/),解压. ● 针对 x64 程序的配置 ■ 将 Pre-built.2\incl ...
- 224. Basic Calculator + 227. Basic Calculator II
▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz. ▶ 自己的全 ...
- python实现进度条--主要用在上传下载文件
在python中进行socket上传文件的时候使用进度条,然后在网上找了好久,找寻相关的进度的条的使用,看了几个,发现总是无法进行调用,主要原因是在进行上传文件的时候,每次传送的数据量是固定的,数据的 ...
- 跟我学算法-tensorflow 实现卷积神经网络
我们采用的卷积神经网络是两层卷积层,两层池化层和两层全连接层 我们使用的数据是mnist数据,数据训练集的数据是50000*28*28*1 因为是黑白照片,所以通道数是1 第一次卷积采用64个filt ...
- Lazy JSF Primefaces Datatable Pagination
http://www.javacodegeeks.com/2012/04/lazy-jsf-primefaces-datatable.html
- js 实现 一张图片的上传
.js进行图片预览 使用input标签来选择图片,使用FileReader读取图片并转成base64编码,然后发送给服务器. <html> <body> <img id= ...
- Linux下强大的查找命令find 用法和常见用例
Linux系统下find是较为常用的指令,find命令在目录结构中搜索文件,并执行指定的操作,掌握它的形式与用法对我们很有用处. 因为Linux下面一切皆文件,经常需要搜索某些文件来编写,所以对于Li ...