帮我分析一下。加上序列化文件之后的缓存,有什么好处?
namespace CanYouLib.Caching.FileBasedCachingProvider
{
public class FBCachingProvider : CachingProvider
{
public FBCachingProvider()
{
_providerConfiguration = ProviderConfiguration.GetProviderConfiguration( ProviderType );
}
private const string ProviderType = "caching";
private ProviderConfiguration _providerConfiguration;
internal static string CachingDirectory = Globals.ApplicationMapPath + "\\Cache\\";
internal const string CacheFileExtension = ".resources";
private static System.Web.Caching.Cache _objCache;
private static System.Web.Caching.Cache objCache
{
get
{
//create singleton of the cache object
if( _objCache == null )
{
_objCache = HttpRuntime.Cache;
}
return _objCache;
}
}
public override object GetItem(string CacheKey)
{
return objCache[CacheKey];
}
public override object GetPersistentCacheItem( string CacheKey, Type objType )
{
object obj = objCache[CacheKey];
if( obj != null )
{
return objCache[CacheKey];
}
else if( DataCache.CachePersistenceEnabled )
{
Stream objStream;
string f = GetFileName( CacheKey );
if( File.Exists( f ) )
{
objStream = File.OpenRead( f );
XmlSerializer serializer = new XmlSerializer( objType );
TextReader tr = new StreamReader( objStream );
obj = serializer.Deserialize( tr );
tr.Close();
Insert( CacheKey, obj, true );
}
}
return obj;
}
public override void Insert( string CacheKey, object objObject, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string f = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f, objObject );
}
else
{
d = null;
}
objCache.Insert( CacheKey, objObject, d );
}
public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string[] f = new string[1];
f[0] = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}
else
{
d = objDependency;
}
objCache.Insert( CacheKey, objObject, d );
}
public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string[] f = new string[1];
f[0] = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}
else
{
d = objDependency;
}
objCache.Insert( CacheKey, objObject, d, AbsoluteExpiration, SlidingExpiration );
}
public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration, CacheItemPriority Priority, CacheItemRemovedCallback OnRemoveCallback, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string[] f = new string[1];
f[0] = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}
else
{
d = objDependency;
}
objCache.Insert( CacheKey, objObject, d, AbsoluteExpiration, SlidingExpiration, Priority, OnRemoveCallback );
}
public override void Remove( string CacheKey )
{
if( objCache[CacheKey] != null )
{
objCache.Remove( CacheKey );
string f = GetFileName( CacheKey );
}
}
public override void RemovePersistentCacheItem( string CacheKey )
{
if( objCache[CacheKey] != null )
{
objCache.Remove( CacheKey );
if( DataCache.CachePersistenceEnabled == true )
{
string f = GetFileName( CacheKey );
DeleteCacheFile( f );
}
}
}
public override string PurgeCache()
{
//省略
}
private int PurgeCacheFiles( string[] strFiles )
{
//省略
return PurgedFiles;
}
private static string GetFileName( string FileName )
{
//省略
}
private static void CreateCacheFile( string FileName )
{
StreamWriter s;
if( ! File.Exists( FileName ) )
{
s = File.CreateText( FileName );
if( s != null )
{
s.Close();
}
}
}
private static void CreateCacheFile( string FileName, object ObjectToPersist )
{
string str = XmlUtils.Serialize( ObjectToPersist );
StreamWriter s;
if( ! File.Exists( FileName ) )
{
s = File.CreateText( FileName );
s.Write( str );
if( s != null )
{
s.Close();
}
}
}
private static void DeleteCacheFile( string FileName )
{
if( File.Exists( FileName ) )
{
File.Delete( FileName );
}
}
}
}
...全文
相关推荐
SpringBoot2.3整合redis缓存自定义序列化的实现
主要介绍了SpringBoot2.3整合redis缓存自定义序列化的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
PHP文件缓存内容保存格式实例分析
主要介绍了PHP文件缓存内容保存格式,是PHP程序开发中非常实用的功能,需要的朋友可以参考下
ASP.NET下使用xml反序列化、缓存依赖实现个性化配置文件的实时生效
本文主要介绍了ASP.NET下使用xml反序列化、缓存依赖实现个性化配置文件的实时生效的方法。具有一定的参考价值,下面跟着小编一起来看下吧
php文件缓存类汇总
主要介绍了php文件缓存类,实例汇总了常见的文件缓存类及其用法,非常具有实用价值,需要的朋友可以参考下
Ruby-Kashmir是一个RubyDSL使得序列化和缓存对象易如反掌
Kashmir是一个Ruby DSL使得序列化和缓存对象易如反掌


