带有F#的ServiceStack.Redis不存储数据.但是C#中的代码几乎相同

 山寨西域刀羊_281 发布于 2023-02-12 11:38

今晚我和F#和redis一起玩.我正在使用ServiceStack.redis连接到在localhost上运行的MSOpenTech redis.出于测试目的,我试图用这样的代码将比特币的价格保存到redis中:

let redis = new RedisClient("localhost")
redis.FlushAll()

let redisBitstamp = redis.As()
let last = {Id = redisBitstamp.GetNextSequence(); Timestamp = 1386459953; Value=714.33M}
redisBitstamp.Store(last)

let allValues = redisBitstamp.GetAll()
allValues.PrintDump()

不幸的是,PrintDump的结果是:

[
    {
            __type: "Program+BitstampLast, RedisSave",
            Id: 0,
            Timestamp: 0,
            Value: 0
    }
]

出于测试目的,我在同一个redis实例上的C#中运行了几乎相同的代码:

class BitstampLast
{
    public Int64 Id { get; set; }
    public int Timestamp { get; set; }
    public decimal Value { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var redis = new RedisClient("localhost");
        redis.FlushAll();

        var redisBitstamp = redis.As();
        var last = new BitstampLast() {Id = redisBitstamp.GetNextSequence(), Timestamp = 1386459953, Value=714.33M};
        redisBitstamp.Store(last);

        var allValues = redisBitstamp.GetAll();
        allValues.PrintDump();

    }
}

结果......

[
    {
            __type: "CSharpRedis.BitstampLast, CSharpRedis",
            Id: 1,
            Timestamp: 1386459953,
            Value: 714.33
    }
]

那么,我错过了什么?为什么它在C#中工作,而在F#中不起作用?

编辑:BitstampLast的定义方式如下:

type BitstampLast = {Id:int64; Timestamp:int; Value:decimal}

这是错的,因为它应该是:

type BitstampLast = {mutable Id:int64; mutable Timestamp:int; mutable Value:decimal}

现在它有效.接下来的问题 - 为什么它应该是可变的?redis有些混乱了这个对象吗?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有