我正在尝试构建自定义DLL,它将特定的键放入Redis键值存储中。我构建、执行,但什么都不做。未添加密钥。这是我迄今为止的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using TSLab.Script;
using TSLab.Script.Handlers;
using StackExchange.Redis;
namespace TSLab.pmus
{
[HandlerCategory("Redis")]
[InputsCount(2)]
public class WriteToRedis : ITwoSourcesHandler, ISecurityInput0, IDoubleInputs, IDoubleReturns, IStreamHandler, IValuesHandlerWithNumber, IContextUses
{
private ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
public IContext Context { set; private get; }
[HandlerParameter(Name = "table", NotOptimized = true)]
public int table { get; set; }
[HandlerParameter(Name = "key", Default = "mykey", NotOptimized = true)]
public string key { get; set; }
public IList<double> Execute(ISecurity sec, params IList<double>[] dataArr)
{
return new double[0];
}
public double Execute(ISecurity sec, ConnectionMultiplexer redis, params double[] dataArr)
{
IDatabase db = redis.GetDatabase(table);
db.StringSet("testKey", "Test string");
return 0;
}
}
}
正如@MarcGravell所说,问题出在两个"执行"方法中。我将代码更改为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using TSLab.Script;
using TSLab.Script.Handlers;
using StackExchange.Redis;
namespace TSLab.pmus
{
[HandlerCategory("Redis")]
[InputsCount(2)]
public class WriteToRedis : ITwoSourcesHandler, ISecurityInput0, IDoubleInputs, IDoubleReturns, IStreamHandler, IValuesHandlerWithNumber, IContextUses
{
private ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
public IContext Context { set; private get; }
[HandlerParameter(Name = "table", NotOptimized = true)]
public int table { get; set; }
[HandlerParameter(Name = "key", Default = "mykey", NotOptimized = true)]
public string key { get; set; }
public IList<double> Execute(ISecurity sec, params IList<double>[] dataArr)
{
IDatabase db = redis.GetDatabase(table);
db.StringSet("testKey", "Test string");
return new double[0];
}
}
}
现在它运行良好。