我在一个ASP.NETMVC应用程序上使用EasyCaching来处理Redis。如文档(Precautions)中所述,使用MessagePack序列化程序将导致时区数据出现问题。这里有一个解决方案,我正在使用它,但它仍然没有按预期工作。
这是我目前的EasyCaching设置:
builder.Services.AddEasyCaching(options =>
{
options.UseRedis(config =>
{
config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6379));
config.SerializerName = "mymsgpack";
}, "redis1");
options.WithMessagePack(x =>
{
x.EnableCustomResolver = true;
x.CustomResolvers = CompositeResolver.Create(new MessagePack.IFormatterResolver[]
{
NativeDateTimeResolver.Instance,
ContractlessStandardResolver.Instance
});
}, "mymsgpack");
});
这基本上是默认配置。我已经实现了一个监视工具,它的工作原理有点像记录一些数据。你告诉它添加一个指标,然后它会在网页中显示所有指标。添加指标(或“记录”指标)的函数调用如下所示:
_metric.AddItem("IAM", DateTime.Now, MetricAggregation.Date);
这意味着“我想在名为'IAM'的度量中记录当前的日期-时间,并且此度量的聚合类型为date”。最后一个部分并不重要(关于当前的问题)。当我查看网页时,所有的日期时间数据都以GMT显示(而不是GMT+3:30,这是我当前的时区)。
在使用EasyCaching之前,我使用了内存解决方案,并将所有数据存储在字典中。这按预期工作,但我想存储数据时,服务器去或失败的任何原因。
我并不坚持使用MessagePack进行序列化,这是EasyCaching在其设置指南中使用的默认值。但任何帮助都很感激,谢谢。
1条答案
按热度按时间new9mtju1#
所以我最终改变了序列化方法,因为我不能用MessagePack做任何其他事情。使用json,问题就解决了:
(我已经更改了此配置的位置,因此在代码开始处删除了
builder
)