一些虚拟主机资源给的少, 如果直接用框架缓存, 估计内存就爆了吧, 如果不用缓存, 虚拟主机自带的数据库也是限制资源的, 访问多了就直接给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;
}

最新文章

  1. php大力力 [051节] 支付宝支付.申请支付资质,等待审核中
  2. 迪杰斯特拉算法——PAT 1003
  3. Objective-c 代理模式(delegate)
  4. Hadoop平台配置总结
  5. Notepad++中的颜色属性大全
  6. 武汉科技大学ACM :1006: 零起点学算法25——求两点之间的距离
  7. c 有关N!阶乘的相关问题----陆续补充上来
  8. 通过sharedpreference两个程序共享数据
  9. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter &#39;username&#39; not found. Available parameters are [1, 0, param1, param2]
  10. Oracle内置函数SQLCODE和SQLERRM的使用
  11. JAVA面向对象和类
  12. 【转载】webstorm忽略node_modules目录
  13. java 捕获所有异常
  14. Redis日常使用随笔
  15. tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)
  16. 【uoj#143】[UER #5]万圣节的数列 构造
  17. java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法
  18. Strange Addition
  19. 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
  20. QTableWidget的表头颜色设置

热门文章

  1. Vim简本
  2. 如何理解并正确使用MySql索引
  3. Ubuntu 16.04 kinetic 编译指定包
  4. Qt5_qt.conf
  5. Codeforces 913D - Too Easy Problems
  6. PC端,移动端分离,如何结合??
  7. Ivan and Burgers CodeForces - 1100F (线性基)
  8. hdu-4023-博弈(模拟)
  9. hdu-1849-nim模板
  10. 关于Floyd求解最小环的问题