C# 学习记录 用缓存来保存临时数据以降低数据库访问频率
如果用户请求接口时需要查询数据库 , 如果很多用户同时请求接口的话就不能每个用户来请求接口都去查询数据库
我的解决思路是 每过一段时间(比如5分钟)请求一次数据库 , 每次请求完成数据库把请求得到的数据缓存起来
新建一个类(比如 我用的AppConfig类 ) 在类里面新加这两行 一个用来存数据库读取出来的数据(model),另一个用来记录时间
public static List<Model> cacheList = new List<Model>();
public static DateTime cacheTime = new DateTime();
然后 在需要返回数据的接口最开始的地方 , 先获取当前时间
DateTime nowTime = DateTime.UtcNow.AddHours(8);
然后判断缓存的数据是否需要更新 (这个APPConfig类上面已经写了),
判断是否是第一次进来(AppConfig.cacheTime.ToString().Equals("01/01/0001 00:00:00")) ,
或者当前时间是否比缓存记录的时间大(DateTime.Compare(nowTime,AppConfig.cacheTime)>0)
如果是第一次进来 就去数据库查询数据 , 查询之后 把当前时间加个5分钟 (我写的是5分钟更新一次 )记录到缓存里面 ,数据也同时记录到缓存里面 (cacheList是从数据库读取的数据列表) ,new出来的AppConfig.cacheTime这个时间需要自己手动先测试一下 我在不同电脑上得到了两种结果 很奇怪 另一种结果 ("0001/1/1 0:00:00") 当然也可以自己指定.ToString("yyyy/MM/dd HH:mm:ss")
if (AppConfig.cacheTime.ToString().Equals("01/01/0001 00:00:00") || AppConfig.cacheTime.ToString().Equals("0001/1/1 0:00:00")|| DateTime.Compare(nowTime,AppConfig.cacheTime)>0) {
//开始执行查询的操作
AppConfig.cacheTime = nowTime.AddMinutes(5); //记录下次查询的时间
AppConfig.cacheList = cacheList;//把查询到的数据(cacheList)放到缓存里面
}else{
//时间距离上次查询没有超过5分钟 , 把缓存数据返回出去 不再执行查询数据库的操作
// 返回缓存的数据 AppConfig.cacheList
}
2019年7月8日11:23:44