redis EasyCaching with MessagePack丢失时区数据

ehxuflar  于 2023-10-15  发布在  Redis
关注(0)|答案(1)|浏览(122)

我在一个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在其设置指南中使用的默认值。但任何帮助都很感激,谢谢。

new9mtju

new9mtju1#

所以我最终改变了序列化方法,因为我不能用MessagePack做任何其他事情。使用json,问题就解决了:

services.AddEasyCaching(options =>
{
    options.UseRedis(config =>
    {
        config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6379));

        config.SerializerName = "myjson";
    }, "redis1");

    options.WithJson("myjson");
});

(我已经更改了此配置的位置,因此在代码开始处删除了builder

相关问题