简介
缓存的工作机制是先从缓存中读取数据,如果没有,再从慢速设备上读取实际数据并同步到缓存。计算机系统里天然就存在多级缓存系统,这是由于不同的硬件设备的访问速度以及容量大小不一致引起的一个选择。比如,CPU到L1/L2/L3到内存到磁盘的访问方式就是一个典型的多级缓存的例子。当CPU需要数据的时候,它首先到L1里找,如果没有找到,则查找L2/L3,如果还是没有找到,则再到内存里找,如果还没有,再到磁盘里查找。不同层级的缓存的访问速度和容量大小各不相同,简要对比如下所示:
名称
访问速度
通常容量大小
L1
1.3纳秒
12组每组32KB数据加32KB代码
L2
3.92纳秒
32组每组256KB
L3
11.11纳秒
30MB
DDR4 内存
...
5年前 (2020-01-16) 794℃ 0评论
0喜欢
由于项目中需要实时消息,所以就使用了ASP.NET(Core) SignalR实时通讯库。因为业务服务与通讯服务是独立的,所以涉及到跨域的问题, 浏览器抛出的异常非常明显,这个是明显跨域相关内容。 报错信息如下:
Access to XMLHttpRequest at ‘http://192.168.2.13:5005/api/v1/commommessage/messageHub/negotiate’ from origin ‘http://127.0.0.1:5500’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control...
5年前 (2020-01-13) 3050℃ 0评论
29喜欢
因某些需求,需要将指定的对象序列化放到缓存中,在使用Newtonsoft.Json序列化时候报错,异常信息清晰明显就是循环引用问题。具体错误如下:
详细异常如下:
fail: System.Exception[-2146233088] Self referencing loop detected for property ‘Ancestor’ with type ”. Path ‘Descendants[0]’. Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property ‘Ancestor’ with type ‘*’. Path &...
5年前 (2020-01-11) 2957℃ 0评论
4喜欢
因某些情况需要在测试人员机器上安装.net core 2.1,系统为Windows 7 SP1。安装.net core2.1,出现 sfx x64.cab has an invalid digital signature错误,安装不成功。错误信息如下:
A file that is required cannot be installed becquse the cabinet file C:\ProgramData\Package Cache\{3551F085-7544-3527-84BA-9706CB1379A1}v2.1.14.0\sfx x64.cab has an invalid digital signature. This may indicate that the cabinet file is corrupt.
根据错误信息得知应该是证书相关问题...
5年前 (2020-01-03) 1562℃ 0评论
12喜欢
Quartz.NET
Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
官网:http://www.quartz-scheduler.net/
源码:https://github.com/quartznet/quartznet
示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
其实Quartz是一个完全由java编写的开源作业调度框架,Quartz是OpenSymphony开...
5年前 (2019-12-16) 2096℃ 0评论
3喜欢
背景后台任务和计划任务最终可能需要在基于微服务的应用程序或任何类型的应用程序中实现。 使用微服务体系结构的区别在于,可以实现一个微服务进程/容器来托管这些后台任务,以便根据需要对其进行减少/增加,或者甚至可以确保它运行该微服务进程/容器的单个实例。
一般在 .NET Core 中,我们将这些类型的任务称为托管服务 ,因为它们是托管在主机/应用程序/微服务中的服务/逻辑。 请注意,在这种情况下,托管服务仅表示具有后台任务逻辑的类。
前言
从 .net core 2.0 开始,开始引入 IHostedService,可以通过 IHostedService 来实现后台任务,但是只能在 WebHost 的基础上使用。从 .net core 2.1 开始微软引入通用主机(Generic Host),使得我们可以在不使用 Web 的情况下,也可以使用 IHostedSe...
5年前 (2019-12-07) 2171℃ 0评论
3喜欢
使用.net core api作为接口对外提供数据,在IIS Express上测试没有发现问题,部署到IIS后出现了405-Method Not Allowed。( 请求方式为DELETE ) .如下图:
由上图的错误得知,此问题应该是IIS未允许当前请求方式。首先查看aspNetCore在IIS中是否限制了请求方式,经过查看并未发现不被允许的请求方式。处理程序映射=>aspNetCore
通过了解 IIS拒绝PUT和DELETE请求是由默认注册的一个名为WebDAVModule的自定义HttpModule导致的。WebDAV的全称为Web-based Distributed Authoring and Versioning,它是一个在多用户之间辅助协同编辑和管理在线文档的HTTP扩展。该扩展使应用程序可以直接将文件写到Web Server上,同时支持文件的...
5年前 (2019-06-12) 2654℃ 0评论
0喜欢
一、Quartz.NET
Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
官网:http://www.quartz-scheduler.net/
源码:https://github.com/quartznet/quartznet
示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
其实Quartz是一个完全由java编写的开源作业调度框架,Quartz是OpenSym...
5年前 (2019-05-10) 1249℃ 0评论
0喜欢
因为使用.net core写了一些简单的控制台应用程序,并且需要一些配置信息。于是想是用.net framework中的 ConfigurationManager进行处理,发ConfigurationManager在.net core 中不被支持。
.net core配置说明
.NET CORE 配置主要涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。
IConfigurationR...
6年前 (2019-03-12) 946℃ 0评论
1喜欢
在.net core 中使用了HttpClient库进行网络访问,有些网站成功,有些网络失败。报错内容如下:
The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set.
‘gbk’ is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.Parameter name: name
报错
详细错误
“gbk”字符集不被...
6年前 (2019-03-10) 1202℃ 0评论
1喜欢
朋友发消息说他老婆公司资料无法拷贝出来,U盘以及常见的网盘全部无效。问我有没有其他办法,于是就使用asp.net core做了一个最简单的文件上传来试一试。理论上应该可行,因为新的上传网站以及页面元素没有在他们公司网监出现过,死马当作活马医吧!离职最后一天的最后2个小时了,时间紧任务哦!
对话
ASP.NET MVC操作支持使用简单模型绑定对较小文件进行单个或者多个文件上传。
使用模型绑定上传小文件
要上传较小的文件,可以使用多部分HTML表单或使用JavaScript构建POST请求。
<form action="/Home/UploadFiles" method="post" name="upload" enctype="multipart/form-data">
<div class="form-group">
...
6年前 (2019-01-10) 1662℃ 0评论
1喜欢
微服务(microservice)的核心理念是将大的单体应用(monolithic application)拆散,形成多个相对较小的单体应用。这些单体应用可以独立进行开发、测试和部署,通过对这些单体应用的编排和组合最终提供完整的服务。微服务将传统的应用架构化整为零,目的是提高应用开发和交付的效率。在传统的单体应用时代,虽然有模块的概念,但是在构建时,众多的模块往往会被构建成一个单一的、庞大的部署包。单体应用的更新往往会导致整个系统的所有服务中断。而在微服务的场景中,所有的功能都是由一个或多个服务提供的,当某个微服务进行更新和维护时,只会影响该服务涉及到的业务,其他模块可以正常对外提供服务。微服务之间相对独立,它们各自可以有各自的开发周期,相互之间不会有过强的捆绑关系,这样有助于加快系统整体迭代更新的节奏。从团队组织上来说,微服务的划分颗粒度较细,可以形成更有针对性的权责关系。
...
6年前 (2018-12-28) 696℃ 0评论
0喜欢
最近使用.net core写了一个简单的网站存活监测小程序,每十分钟进行一次检测,如果异常或者网站无法访问就通过腾讯云短信服务进行通知。在Windows 和 Linux 系统中运行均正常,但放到Linux系统下Docker环境中,获取到的时间就慢8个小时,默认似乎不是东八区了。记得之前也遇到过这个问题,使用了一个.net Core类库(NodaTime)解决的,详情请见:.net Core 中DateTime在Linux Docker中与Windows时间不一致 。但是这次不想用多余的类库来解决,所以通过同步时间来解决。
共享主机的localtime
创建容器的时候指定启动参数,挂载localtime文件到容器内 ,保证两者所采用的时区是一致的。
docker run --name qq -v /etc/localtime:/e...
6年前 (2018-12-14) 2468℃ 2评论
13喜欢
/// <summary>
/// 缓存帮助类
/// </summary>
public class MemoryCacheHelper
{
private static readonly MemoryCache Cache = new MemoryCache(new MemoryCacheOptions());
/// <summary>
/// 验证缓存项是否存在
/// </summary>
/// <param name="key">缓存Key</param>
/// <returns></returns>
public stat...
6年前 (2018-10-14) 1457℃ 0评论
0喜欢
最近写了一个.net core项目,部署到CentOS并在docker上运行的时候,发现DateTime.Now获取的时间与Windows不一致(定时执行的任务,晚了8个小时),在Windows中可以正确的获得本地时间,而在Linux CentOS 的Docker环境中获取的时间少了8个小时。通过Linux命令查看本机时间,本地时间正确,但.net core在Docker运行获取时间依然是少8个小时。猜测可能是时区的问题,然后就找到了NodaTime的一个库进行获取统一时区的时间,完成后Linux CentOS的Docker环境上获取的时间就与Windows中保持了一致。
NodaTime库需要下载相关包,也可以直接使用Nuget下载。
项目地址
nodatime项目git开源nodatime官网
新增一个DateTime扩展方法:
pu...
6年前 (2018-09-30) 6631℃ 0评论
17喜欢
Unix时间戳(Unix timestamp)
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用.
因业务需求,需要与银行进行接口对接。因为的银行接口中是有校验时间且时间格式要求为Unix timestamp,所以就使用C#进行了相关的转换。
public static class DateTimeExtension
{
/// <summary>
/// DateTime转换成Unix timestamp
/// </summa...
6年前 (2018-08-16) 593℃ 0评论
0喜欢
最近有遇到两个对象的赋值问题,两个对象的属性几乎都一样的,所以写了个通过反射获取属性的然后赋值的方法,把一个对象的属性的值赋值给另对象。
public static class MapperHelper
{
/// <summary>
/// 反射实现两个类的对象之间相同属性的值的复制
/// 适用于初始化新实体
/// </summary>
/// <typeparam name="R">返回的实体</typeparam>
/// <typeparam name="S">数据源实体</typeparam>
/// <param name="s">数据源实体</param&...
10年前 (2015-02-20) 901℃ 0评论
1喜欢