惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
F
Fortinet All Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
V
Visual Studio Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
L
LangChain Blog
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
P
Proofpoint News Feed
博客园_首页
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 饭

This MySqlConnection is already in use. See https://fl.vu/mysql-conn-reuse WinForm使用Python.Net调用Yolov8将图像显示在pictureBox控件上. EPPlus操作透视表过滤数据 JS/html5 文字转语音 关于IIS部署.NET7的记录 nginx伪静态过滤静态文件 阿里云Nginx伪静态 记录一些壁纸/图片网站 js四舍五入. javascript四舍五入 真正四舍五入 不是四舍六入五成双 比较两个相同类型的实例是否相同, 支持忽略指定字段. entity framework 实现按照距离排序[转] 正padding负margin实现多列等高布局(转) 在iframe内页触发顶层页面body的blur事件 bootstrap 模态窗口 多重/多个弹窗滚动条补丁 2019年6月车型数据Access数据库+缩略图 更新于2019年6月5日. sql server 2012 分页/dapper/C#拼sql/免储存过程/简易 正则: 匹配除了某些单词之外的其他单词 按顺序动态加载js, 可控版本, 有回调 知识点关键词(记录一下) TimeSpan格式化字符串格式(摘)
asp.net mvc json数据缓存
· 2018-06-04 · via 博客园 - 饭

一些虚拟主机资源给的少, 如果直接用框架缓存, 估计内存就爆了吧, 如果不用缓存, 虚拟主机自带的数据库也是限制资源的, 访问多了就直接给timeout了,

用json文件形式缓存查询出来的数据, 虽然占用一些空间, 使用一些IO, 也是比查询数据库快的, 至少不会timeout了, 不过会占用一些空间, 可是现在虚拟主机空间都不小了, 不差这一点了哈哈,

key直接作为文件名了,扩展名乱写的(*.cache)

超时时间比较用的是DateTime.Ticks, 单位是微妙, 看下面的换算吧, 在AppSetting中增加一个cache_time节点, 单位是秒

<appSettings>
    <!-- 缓存时间, 单位(秒) -->
    <add key="cache_time" value="120" />
</appSettings>
 1 public class JCache
 2 {
 3     public static string DirPath { get; set; }
 4     private static string SplitChar = "!/~/#!";
 5     /// <summary>
 6     /// 缓存时间(秒)
 7     /// </summary>
 8     private static long CacheTime
 9     {
10         get
11         {
12             return Convert.ToInt64(ConfigurationManager.AppSettings["cache_time"]) * 10000000;
13         }
14     }
15     public static T Get<T>(string key)
16         where T : class, new()
17     {
18         var filename = Path.Combine(DirPath, key + ".cache");
19         if(!Directory.Exists(DirPath))
20         {
21             Directory.CreateDirectory(DirPath);
22         }
23         if (!File.Exists(filename))
24             return null;
25         var fileContent = string.Empty;// File.ReadAllText(filename, System.Text.Encoding.UTF8);
26         using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
27         {
28             fileContent = new StreamReader(fs, System.Text.Encoding.UTF8).ReadToEnd();
29         }
30         if (string.IsNullOrEmpty(fileContent))
31             return null;
32         if (!fileContent.Contains(SplitChar))
33             return null;
34         var arr = fileContent.Split(new string[] { SplitChar }, StringSplitOptions.RemoveEmptyEntries);
35         try
36         {
37             var d = Convert.ToInt64(arr[0]);
38             if (DateTime.Now.Ticks - d > CacheTime)
39                 return null;
40 
41             var res = JsonConvert.DeserializeObject<T>(arr[1]);
42             return res;
43         }
44         catch (Exception ex)
45         {
46             return null;
47         }
48     }
49 
50     public static void Set(string key, object obj)
51     {
52         if (!Directory.Exists(DirPath))
53         {
54             Directory.CreateDirectory(DirPath);
55         }
56         var filename = Path.Combine(DirPath, key + ".cache");
57         var d = DateTime.Now.Ticks.ToString();
58         if (obj == null)
59             return;
60         var json = JsonConvert.SerializeObject(obj);
61         var fileContent = string.Concat(d, SplitChar, json);
62         try
63         {
64             using (var fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
65             {
66                 new StreamWriter(fs, System.Text.Encoding.UTF8).Write(fileContent);
67             }
68             //File.WriteAllText(filename, fileContent);
69         }
70         catch (Exception ex)
71         {
72             var xx = 1;
73         }
74     }
75 }

 使用方法

var cahceKey = "xxxkey";
var cache = JCache.Get<T>(cacheKey);

var model = new T();
if(cache == null){
     JCache.Set<T>(cacheKey, 查询出来的数据);
}else{
    model = cache;
}