封装MemoryCache
一、定义一个缓存接口IChace
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 缓存
{
public interface ICache
{
T Get<T>(string key);
void Add(string key,object data,int cacheTime=);
bool Contains(string keys);
void Remove(string key);
void RemoveAll();
object this[string key] { get;set; }
int Count { get; }
}
}
二、定义一个MyCache类用来封装MemoryCache的基本业务,实现缓存接口IChace
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Caching;
using System.Text; namespace 缓存
{
class MyCache : ICache
{
/// <summary>
/// 索引器,提供一个全局读写
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public object this[string key] { get => Cache.Get(key); set => Add(key,value); } protected MemoryCache Cache
{
get
{
return MemoryCache.Default;
}
} public int Count =>(int)Cache.GetCount() ; /// <summary>
/// 添加缓存
/// </summary>
/// <param name="key"></param>
/// <param name="data"></param>
/// <param name="cacheTime">分钟</param>
public void Add(string key, object data, int cacheTime = )
{
if (Cache.Contains(key))
{
this.Remove(key);
}
var policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime);
Cache.Add(new CacheItem(key, data), policy);
} /// <summary>
/// 判断cache是否存在
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool Contains(string key)
{
return Cache.Contains(key);
} /// <summary>
/// 读取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T Get<T>(string key)
{
if (Cache.Contains(key))
{
return (T)Cache[key];
}
else
{
return default(T);
}
} /// <summary>
/// 删除缓存
/// </summary>
/// <param name="key"></param>
public void Remove(string key)
{
Cache.Remove(key);
} /// <summary>
/// 删除所有缓存
/// </summary>
public void RemoveAll()
{
foreach (var item in Cache)
{
this.Remove(item.Key);
}
}
}
}
三、定义一个CacheManager类来管理不同的缓存对象,上端主程序直接调用该类进行业务缓存
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 缓存
{
public class CacheManager
{
private CacheManager()
{ }
private static ICache _cache = null;
static CacheManager()
{
_cache = Activator.CreateInstance(typeof(MyCache)) as ICache;
} /// <summary>
/// 获取缓存数量
/// </summary>
public static int Count => _cache.Count; /// <summary>
/// 判断缓存项是否存在
/// </summary>
/// <param name="key">缓存项</param>
/// <returns></returns>
public static bool Conatins(string key)
{
return _cache.Contains(key);
} /// <summary>
/// 判断是否存在缓存,存在返回结果,不存在返回T类型的默认值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T Get<T>(string key)
{
if(Conatins(key))
{
return _cache.Get<T>(key);
}
else
{
return default(T);
}
} /// <summary>
/// 判断是否存在缓存,如果没有则先增加再获取
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">缓存项</param>
/// <param name="func">没有缓存时所增加的缓存项</param>
/// <param name="cacheTime">默认过期时间</param>
/// <returns></returns>
public static T Get<T>(string key,Func<T> func,int cacheTime=)
{
if (!_cache.Contains(key))
{
_cache.Add(key, func, cacheTime);
}
return _cache.Get<T>(key);
} /// <summary>
/// 删除缓存数据项
/// </summary>
/// <param name="key">缓存项</param>
public static void Remove(string key)
{
_cache.Remove(key);
} /// <summary>
/// 删除所有缓存数据项
/// </summary>
public static void RemoveAll()
{
_cache.RemoveAll();
}
}
}
封装MemoryCache的更多相关文章
- 第二节:从程序集的角度分析MemoryCache,并完成基本封装
一. 轻车熟路 有了上一个章节对 System.Web.Caching.Cache 的探究,这里我们按照同样的思路对 MemoryCache 进行探究,相信必定会得心应手. 1. 程序集准备 a. 需 ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- 【无私分享:ASP.NET CORE 项目实战(第十一章)】Asp.net Core 缓存 MemoryCache 和 Redis
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitHub上下载了十几个源码参考, Memory 和 Redis 终于写出一个 ...
- Atitit. C# java 的api 目录封装结构映射总结
Atitit. C# java 的api 目录封装结构映射总结 C# java ref System.Reflection System.Type, java.lang.ref concurrent ...
- Android 框架修炼-自己封装双缓存管理框架库
一.概述 Android开发中,网络请求是很重要的一部分,而缓存网络请求来的图片或者响应结果字符串或者结果流,既可以省流量,同时也可以帮助我们 解决无网或弱网情况下加载情况,当然也可以提升程序性能效率 ...
- Asp.net Core 缓存 MemoryCache 和 Redis
Asp.net Core 缓存 MemoryCache 和 Redis 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitH ...
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理(转)
在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...
- 在ASP.NET Core 2.0中使用MemoryCache
说到内存缓存大家可能立马想到了HttpRuntime.Cache,它位于System.Web命名空间下,但是在ASP.NET Core中System.Web已经不复存在.今儿个就简单的聊聊如何在ASP ...
随机推荐
- 你不知道的JavaScript(上卷) (Kyle Simpson 著)
第一部分 作用域和闭包 第1章 作用域是什么 (已看) 1.1 编译原理 1.2 理解作用域 1.2.1 演员表 1.2.2 对话 1.2.3 编译器有话说 1.2.4 引擎和作用域的对话 1.2.5 ...
- js判斷是否是正整數
var curt_page = $("input[name='curt_page']").val(); if (!(/(^[1-9]\d*$)/.test(curt_page))) ...
- js获取上传图片大小,判断上传图片类型,获取图片真实宽度和高度
html部分 <div class="form-group col-md-12"> <label class="col-md-2 text-right& ...
- laravel 获取上一条insert语句产生的id
<?php //頭部引入DB類 use Illuminate\Support\Facades\DB; //在方法中獲取获取上一条insert语句产生的id $id = DB::getPdo()- ...
- mysql程序之mysqld_safe详解
mysqld_safe命令 mysqld_safe是在Unix上启动mysqld服务器的推荐方法.mysqld_safe增加了一些安全特性,例如在发生错误时重新启动服务器,并将运行时信息记录到错误日志 ...
- windows 下 Anaconda 安装 TensorFlow
转自: https://www.cnblogs.com/nosqlcoco/p/6923861.html 什么是 Anaconda? Anaconda is the leading open data ...
- Windows核心编程 中部分代码 Delphi 实现
// ① Delphi 使用 Interlocked 系列函数 var MyValue:Longint = ; // = Integer begin InterlockedIncrement(MyVa ...
- Thinkphp自定义标签
1.定义TagLib目录和文件 TagLibSmarTop.class.php 2.配置文件 <?php return array( 'APP_AUTOLOAD_PATH'=>'@.Ta ...
- Spring cloud和Dubbo
dubbo由于是二进制的传输,占用带宽会更少springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的 ...
- Windows Azure Virtual Machine (35) Azure VM通过Linked DB,执行SQL Job
<Windows Azure Platform 系列文章目录> 今天遇到一个Case,客户在使用Azure Automation,执行Azure SQL Database 存储过程的时候, ...