servicestack.redis,redisql,Redis,servicestack.redis,Redisql" /> servicestack.redis,redisql,Redis,servicestack.redis,Redisql" />

是否有一种方法可以使用ServiceStack.Redis使用Redisql包获得列的相同数据类型的结果?

是否有一种方法可以使用ServiceStack.Redis使用Redisql包获得列的相同数据类型的结果?,redis,servicestack.redis,redisql,Redis,servicestack.redis,Redisql,我想用ServiceStack.Redis包连接到带有c#的Redis,并使用下面的语句 var redisManager = new RedisManagerPool("127.0.0.1:6380"); var redis = redisManager.GetClient(); redis.Custom("DEL", "DB"); redis.Custom(&quo

我想用ServiceStack.Redis包连接到带有c#的Redis,并使用下面的语句

        var redisManager = new RedisManagerPool("127.0.0.1:6380");
        var redis = redisManager.GetClient();

        redis.Custom("DEL", "DB");

        redis.Custom("REDISQL.CREATE_DB", "DB");
        redis.Custom("REDISQL.EXEC", "DB", "CREATE TABLE TABLE1(A INT, B TEXT);");
        redis.Custom("REDISQL.CREATE_STATEMENT", "DB", "INSERTINTOTABLE1STMT", "INSERT INTO TABLE1 VALUES(?1,?2)");
        redis.Custom("REDISQL.EXEC_STATEMENT", "DB", "INSERTINTOTABLE1STMT", 1, "Value1");
        redis.Custom("REDISQL.EXEC_STATEMENT", "DB", "INSERTINTOTABLE1STMT", 2, "Value2");
        var res = redis.Custom("REDISQL.EXEC", "DB", "SELECT * FROM TABLE1");
查询执行得很好。表1的列“A”定义为整数。但从表1检索所有行的最后一个命令将“A”列的数据作为文本返回,因为结果是文本类型

是否有方法使用列的相同数据类型获得结果

127.0.0.1:6379> REDISQL.V2.CREATE_DB DB
1) 1) "OK"
127.0.0.1:6379> REDISQL.EXEC DB COMMAND "CREATE TABLE TABLE1(A INT, B TEXT);"
1) 1) "DONE"
2) 1) (integer) 0
127.0.0.1:6379> REDISQL.EXEC DB COMMAND "INSERT INTO TABLE1 VALUES (1,'A'),(2,'B');"
1) 1) "DONE"
2) 1) (integer) 2
127.0.0.1:6379> REDISQL.EXEC DB COMMAND "SELECT  * FROM TABLE1;"
1) 1) "RESULT"
2) 1) "A"
   2) "B"
3) 1) "INT"
   2) "TEXT"
4) 1) (integer) 1
   2) "A"
5) 1) (integer) 2
   2) "B"
127.0.0.1:6379> REDISQL.EXEC DB COMMAND "SELECT  * FROM TABLE1;" json
"{\"rows\":[{\"A\":1,\"B\":\"A\"},{\"A\":2,\"B\":\"B\"}],\"number_of_rows\":2,\"columns\":{\"A\":\"INT\",\"B\":\"TEXT\"}}"
正如您所提到的,问题在于ServiceStack返回一个简单的RedisText,而不是redis协议中正确的数据解释器

在上面的示例中,我使用的是redisqlv2(现在称为zeeSQL),它还返回列的类型

此外,我们可以直接返回JSON,并输入正确的类型

有关zeeSQL中所有命令的更多信息,请参见:

不幸的是,除了向ServiceStack维护人员提出建议之外,我认为我们没有什么可以做的

显而易见的建议是切换到RediSQL V2/zeeSQL。我们与RediSQL V1保持完美的向后兼容性


您只需在命令前面加上
REDISQL.V1
,而不必只加
REDISQL

,不确定它是否对该模块有用,但您可以将原始
字节[]
捕获到
RedisData
中。你能用你的
RedisText
更新你的问题来序列化json吗,即
res.ToJson()
。不熟悉库,想知道类型信息是否在
RedisText
响应中捕获。我也在使用ServiceStack.Redis和RediSQL/zeeSQL,并且已经解决了我需要的大部分问题。是的,rawtext命令中返回的RedisText不容易处理,这是可能的。我编写了一个非常简单的“ORM”,用于在zeeSQL中与SqLite db通信,它使用RedisText和反射来解释正确的值。还请注意,在最新版本的zeeSQL中,您可以在末尾附加“json”,以将查询结果作为json blob返回。@Serhat应将其标记为answer=)