asp.net mvc json数据缓存
一些虚拟主机资源给的少, 如果直接用框架缓存, 估计内存就爆了吧, 如果不用缓存, 虚拟主机自带的数据库也是限制资源的, 访问多了就直接给timeout了,
用json文件形式缓存查询出来的数据, 虽然占用一些空间, 使用一些IO, 也是比查询数据库快的, 至少不会timeout了, 不过会占用一些空间, 可是现在虚拟主机空间都不小了, 不差这一点了哈哈,
key直接作为文件名了,扩展名乱写的(*.cache)
超时时间比较用的是DateTime.Ticks, 单位是微妙, 看下面的换算吧, 在AppSetting中增加一个cache_time节点, 单位是秒
<appSettings>
<!-- 缓存时间, 单位(秒) -->
<add key="cache_time" value="120" />
</appSettings>
public class JCache
{
public static string DirPath { get; set; }
private static string SplitChar = "!/~/#!";
/// <summary>
/// 缓存时间(秒)
/// </summary>
private static long CacheTime
{
get
{
return Convert.ToInt64(ConfigurationManager.AppSettings["cache_time"]) * ;
}
}
public static T Get<T>(string key)
where T : class, new()
{
var filename = Path.Combine(DirPath, key + ".cache");
if(!Directory.Exists(DirPath))
{
Directory.CreateDirectory(DirPath);
}
if (!File.Exists(filename))
return null;
var fileContent = string.Empty;// File.ReadAllText(filename, System.Text.Encoding.UTF8);
using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fileContent = new StreamReader(fs, System.Text.Encoding.UTF8).ReadToEnd();
}
if (string.IsNullOrEmpty(fileContent))
return null;
if (!fileContent.Contains(SplitChar))
return null;
var arr = fileContent.Split(new string[] { SplitChar }, StringSplitOptions.RemoveEmptyEntries);
try
{
var d = Convert.ToInt64(arr[]);
if (DateTime.Now.Ticks - d > CacheTime)
return null; var res = JsonConvert.DeserializeObject<T>(arr[]);
return res;
}
catch (Exception ex)
{
return null;
}
} public static void Set(string key, object obj)
{
if (!Directory.Exists(DirPath))
{
Directory.CreateDirectory(DirPath);
}
var filename = Path.Combine(DirPath, key + ".cache");
var d = DateTime.Now.Ticks.ToString();
if (obj == null)
return;
var json = JsonConvert.SerializeObject(obj);
var fileContent = string.Concat(d, SplitChar, json);
try
{
using (var fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
new StreamWriter(fs, System.Text.Encoding.UTF8).Write(fileContent);
}
//File.WriteAllText(filename, fileContent);
}
catch (Exception ex)
{
var xx = ;
}
}
}
使用方法
var cahceKey = "xxxkey";
var cache = JCache.Get<T>(cacheKey); var model = new T();
if(cache == null){
JCache.Set<T>(cacheKey, 查询出来的数据);
}else{
model = cache;
}
asp.net mvc json数据缓存的更多相关文章
- ASP.NET MVC 数据库依赖缓存
ASP.NET MVC 数据库依赖缓存 问题背景 最近做一个非常简单的功能,就是使用ajax请求的方式从服务端请求一段下拉表的数据. 以前也有做过这个功能,只不过这次做这个功能的时候冒出了一个想法 ...
- Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...
- ASP.NET MVC中将数据从Controller传递到视图
ASP.NET MVC中将数据从Controller传递到视图方法 1.ViewData ViewData的类型是字典数据,key-value 如:ViewData["Data"] ...
- 解决ASP.NET MVC(post数据)Json请求太大,无法反序列化(The JSON request was too large to be deserialized)
这个问题出现的场景并不是很多,当你向服务端异步(ajax)post数据非常大的情况下(比如做权限管理的时候给某个角色分配权限那么就可能会出现,我所遇到的就是该角色大概200个模块每个模块平均2个功能- ...
- ASP.NET MVC Json() 处理大数据异常解决方法 json MaxJsonLength
网上很多解决方案,在webconfig中添加,但是实践证明无效 <system.web.extensions> <scripting> <webServices> ...
- ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)
草图 真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...
- 初遇 Asp.net MVC 数据库依赖缓存那些事儿
问题背景: 最近做一个非常简单的功能,就是使用ajax请求的方式从服务端请求一段下拉表的数据. 以前也有做过这个功能,只不过这次做这个功能的时候冒出了一个想法: 我请求的这段数据它是一段相对比较固定的 ...
- ASP.NET MVC 数据库依赖缓存的实现
当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过轮询获取数据变化的信息,使用轮询的话也不可能重新查一次后再和以前的数据做比较,如果这样的话如果我一个 ...
- Asp.NET MVC JSON序列化问题
最近在做项目的时候遇到一个JSON序列化问题. 环境:ASP.NET MVC 4.0 数据库:SQL 2008 在将获取的数据从后台以json的形式传给前台的easyui treegrid绑定的时候通 ...
随机推荐
- package 'orocos-bfl' not found CMake Error at /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:283 (message):
#没有数字 sudo apt-get install ros-indigo-bfl
- Java 密码扩展无限制权限策略文件[转]
因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制.比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件. 官方网站提供了JCE无限制权限策略文件的下载: JDK ...
- 一个纯净的webpack4+angular5脚手架
该篇主要是结合刚发布不久的webpack4,搭建一个非cli的angular5的脚手架demo,主要分为以下几个方面阐述下脚手架结构: # 脚手架基础架构(根据angular5的新规范) /** * ...
- 原生js的博客
原生js一里边还有很多二三等http://www.cnblogs.com/charling/p/3527561.html 选区器 http://wenku.baidu.com/link?url=zr2 ...
- Java基础八--构造函数
Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...
- 16S 基础知识、分析工具和分析流程详解
工作中有个真理:如果你连自己所做的工作的来龙去脉都讲不清楚,那你是绝对不可能把这份工作做好的. 这适用于任何行业.如果你支支吾吾,讲不清楚,那么说难听点,你在混日子,没有静下心来工作. 检验标准:随时 ...
- SGE:qsub/qstat/qdel/qhost 任务投递和监控
参考: Oracle Grid Engine qsub命令 SGE - qsub使用范例 SGE作业基本用法 qsub是最为稳定的底层任务投递系统,就是把一个脚本投递到集群的计算节点上运行. 注意,只 ...
- php--------对象(object) 与 数组(array) 的转换
php开发中常常用到数组,sql数据都是数组,数组和对象用的也是比较多的,常常相互转化,数组是PHP的灵魂,非常强大,面向对象编程也是挺方便的. /** * 数组 转 对象 * * @param ar ...
- H5基础知识(一)
一.概述 HTML5 是html4.0 升级版 结构 Html5 .样式 css3 .行为: API 都有所增强 HTML5并不仅仅只是做为HTML标记语言的一个最新版本,更重要的是它制定了Web ...
- MySQL Replication 线程(理解详细过程)
Replication 线程 Mysql 的Replication 是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之S ...