当前位置: 首页 > news >正文

网站怎么做mip技术/昆明seo关键词排名

网站怎么做mip技术,昆明seo关键词排名,网站建设的电话回访,wordpress配置多个页面一:背景1. 讲故事18年的时候在做纯内存项目的过程中遇到了这么一个问题,因为一些核心数据都是飘在内存中,所以内存空间对我们来说额外宝贵,但偏偏项目中有些数据需要缓存,比如说需要下钻的报表上的点,基于性…

一:背景

1. 讲故事

18年的时候在做纯内存项目的过程中遇到了这么一个问题,因为一些核心数据都是飘在内存中,所以内存空间对我们来说额外宝贵,但偏偏项目中有些数据需要缓存,比如说需要下钻的报表上的点,基于性能的考虑,不希望采用独立的缓存中间件,比如 redis, mongodb,毕竟再怎么滴还是要走网络io,但直接放在本机内存中也不现实,那有没有均衡于 native cache 和 cache server 之间的方案呢?对的,就是 disk cache,毕竟 磁盘IO 的读写要远大于网络IO,更何况配的是 SSD 呢。

二:寻找解决方案

1. 检索 github

有了 disk cache 这个大方向就可以去 github 上检索关键词,看看有没有类似的中间件,说实话,java的倒不少,比如著名的 guava,ehcache,不仅有cache的简单操作,还附带各种统计信息,刷新了对缓存认知的三观哈,尤其是 ehcache 太??了,堆内,堆外,磁盘,分布式通通支持,用 C# 写的好不容易找到一个 disk cache 还不幸是收费的,气人哈,用 C# 调用 Java 肯定不现实了哈。

2. 使用sqlite作为 disk cache

既然开源社区没什么好的东西,看来只能自己封装一下了,像 ehcache 那种高阶的 diskcache 搞不定,用简单的 sqlite 作为本机的 diskcahe 还是可以的,接下来试试看。


class DiskCache
{
private static readonly string dbFile = $@"{Environment.CurrentDirectory}\mysqlite1.db";
private static readonly string connectionString = $@"Data Source={dbFile};Version=3";

//过期数据监测:【一分钟来一次】
private static Timer timer = new Timer((arg) =>
{

}, null, 1000, 1000 * 60);

static DiskCache(){
if (!File.Exists(dbFile))
{
var schema = @"CREATE TABLE Cache (
cachekey VARCHAR (1000) PRIMARY KEY NOT NULL,
cachevalue TEXT NOT NULL,
created DATE NOT NULL,
expried DATE NOT NULL
);";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Execute(schema);
}
}
}

public static void Set(string key, T value, int expiredMinutes)
{using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{var sql = $"delete from Cache where cachekey =@key;" +$"insert into Cache(cachekey,cachevalue,created,expried) values (@cachekey,@cachevalue,@created,@expried)";
connection.Execute(sql, new
{
key = key,
cachekey = key,
cachevalue = Newtonsoft.Json.JsonConvert.SerializeObject(value),
created = DateTime.Now,
expried = DateTime.Now.AddMinutes(expiredMinutes)
});
}
}public static T Get(string key)
{using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{var sql = $"select cachevalue from Cache where cachekey=@cachekey and expried > @expried";var query = connection.QueryFirstOrDefault(sql, new { cachekey = key, expried = DateTime.Now });var json = JsonConvert.DeserializeObject(query.cachevalue);return json;
}
}
}

这里有二个注意点:

  • 因为是做缓存,所以数据库和表的创建都要通过程序自动化,数据库是否存在判断 file 文件是否存在即可。

  • 过期数据的问题,因为我有 expried 字段,这一点可以学习GC思想,使用 Timer 在后台定期清理。

有了这些基础之后,原子化的缓存就实现好了,接下来试一下基本的 Get / Set 方法。

eae6803cde08b769978ed60ab6bb6ba1.png

这个方案很好的节省了我宝贵的内存,同时速度又是 networkio 和 native 之间的一个平衡,算是个不错的解决办法吧。

三:aspnetcore 的 EasyCaching

EasyCaching 是园子里 @Catcher Wong 的作品 [https://www.cnblogs.com/catcher1994/p/10806607.html],点赞~~~ 看了下提供了很多种 provider,如下图:

f1ad6d84233465dd179167d822c46c9e.png

我想后面肯定还会有更多的 provider 出现,如:leveldb,Cassandra,接下来看看这玩意怎么玩。

1. 安装使用

在 nuget 上 搜一下 EasyCaching.SQLite 安装即可,接下来就是使用文档:https://easycaching.readthedocs.io/en/latest/SQLite/#2-config-in-startup-class 如下图:

a0bf7deda0cf5cb33937d2d7112842e4.png

文档中是采用依赖注入的方式,而我的程序是 console 模式的后端服务,并没有 ServiceCollection,先模拟着试试看。


static void Main(string[] args){
IServiceCollection services = new ServiceCollection();

services.AddEasyCaching(option =>
{
option.UseSQLite(c =>
{
c.DBConfig = new SQLiteDBOptions
{
FileName = "demo.db",
CacheMode = SqliteCacheMode.Default,
OpenMode = SqliteOpenMode.ReadWriteCreate,
};
}, "m1");
});

IServiceProvider serviceProvider = services.BuildServiceProvider();

var factory = serviceProvider.GetService();var cache = factory.GetCachingProvider("m1");
cache.Set("user", "hello world!", TimeSpan.FromSeconds(20));var info = cache.Get<string>("user");
Console.WriteLine(info);
}

3386ef757355291cc77e3974d18d8795.png

接下来用 SQLiteStudio 打开 demo.db 看一下数据呈现,如下图:

a2686915057c9aef289d269ffc101ca8.png

可以看到人家的框架比我的多了一个 name 字段,看样子是给 多个 cache 做隔离用的,不过这里貌似有三个需要优化的地方。

  • 并不是每一个程序都要使用 依赖注入 的方式 ,提供更便捷的方式初始化就更好了。

  • 看了下源码,并没有找到可以定期删除过期数据的业务逻辑。

  • 建议提供一些 cache 的统计信息,如命中次数,某一个key最后命中时间等等时分统计图。

四:总结

可能很多人说都什么年代了还用 disk cache,这偏偏这万千世界啥需求都有,这几年开源项目越来越多,社区向好,值得点赞。

http://www.jmfq.cn/news/4736305.html

相关文章:

  • 自己做链接的网站吗/乱码链接怎么用
  • 营销型网站建设服务/专业北京网站建设公司
  • 360网站地图怎么做/app代理推广合作50元
  • 企业网站策划书模板范文/网站推广网
  • 网站权重分析/百度关键词热度
  • 欧美风格外贸网站建设/疫情防控最新数据
  • 如何快速的做网站/精准推广
  • 镇江网站制作哪家好/什么是seo营销
  • 快速提升网站排名/百度全网营销
  • 人民日报客户端怎么投稿/seo软件系统
  • 网站建设深圳公司/seo全网优化推广
  • 做网站编程/网站建设情况
  • 万网网站备案证书/竞价是什么工作
  • wordpress页面跳舞/长沙网站优化对策
  • 如皋做网站/长沙网站优化方法
  • 做网站需要向客户了解什么/seo概念
  • php手机网站开发工具/好看的网站设计
  • 国外幼儿园网站模板/郑州网络推广厂家
  • 大连比较好的网站公司/搜索引擎优化的各种方法
  • 中学生网站作品/友情链接有什么用
  • 台州模板建站代理/渠道网
  • wordpress在哪里设置编辑器/seo网站排名优化公司哪家好
  • 如何建立网站的英文版/郑州网络推广公司
  • 林业网站源码/怎样创建自己的网站
  • 查看网站cms/搜索引擎排名机制
  • 租号网站开发/网站批量收录
  • 鲜花网站建设论文/路由优化大师
  • 广州网站设计开发/日本站外推广网站
  • asp动态网站开发教程/seo网络营销案例分析
  • 金融业反洗钱培训网站/百度app下载链接