ServiceStack.Redis 在缓存中存储空对象
ServiceStack.Redis stores empty object in the cache
我正在尝试为我的 c# 项目实现一个 redis 缓存。我使用了 redisClient ,它适合存储普通数据类型,如 int 和 strings 但不适合存储对象。然后我移动到 RedisTypedClient,它应该将我的对象存储在 redis 中,但它 存储一个空对象 。当我尝试检索该对象时,它会创建一个新对象并 returns 那个。
这是我的测试代码,我正在尝试使用它,但它不起作用。
internal class Test
{
public int a;
public int b;
public string s;
public void show()
{
Console.WriteLine(a + " " + b + " " + s);
}
}
public class Program
{
private static void Main(string[] args)
{
using (var redisClient = new RedisClient("localhost"))
{
var t = new List<Test>();
t.Add(new Test {a = 1, b = 2});
t.Add(new Test {a = 3, b = 4});
var key = "e";
var rtest = redisClient.As<Test>();
rtest.Store(t[0]).show();
Console.WriteLine(t[0].GetId());
var q = rtest.GetById(t[0].GetId());
}
Console.ReadKey();
}
我也试过使用redis列表。
IRedisList<Test> tl = rtest.Lists["testl"];
tl.Add(new Test { a = 1, b = 2 });
tl.Add(new Test { a = 3, b = 4 });
var rlist = rtest.Lists["testl"];
但同样的事情也发生在这种情况下。它存储空对象。
我是 windows 上的 Redis 新手,我可能犯了一些错误。但我无法让它工作。任何帮助将不胜感激。
默认情况下 ServiceStack.Text 序列化器只存储 public 属性 所以你需要转换你的 字段 class 您希望序列化为属性,例如:
internal class Test
{
public int a { get; set; }
public int b { get; set; }
public string s { get; set; }
public void show()
{
Console.WriteLine(a + " " + b + " " + s);
}
}
或者您可以更改文本序列化程序以同时序列化 public 字段 并使用:
JsConfig.IncludePublicFields = true;
我正在尝试为我的 c# 项目实现一个 redis 缓存。我使用了 redisClient ,它适合存储普通数据类型,如 int 和 strings 但不适合存储对象。然后我移动到 RedisTypedClient,它应该将我的对象存储在 redis 中,但它 存储一个空对象 。当我尝试检索该对象时,它会创建一个新对象并 returns 那个。
这是我的测试代码,我正在尝试使用它,但它不起作用。
internal class Test
{
public int a;
public int b;
public string s;
public void show()
{
Console.WriteLine(a + " " + b + " " + s);
}
}
public class Program
{
private static void Main(string[] args)
{
using (var redisClient = new RedisClient("localhost"))
{
var t = new List<Test>();
t.Add(new Test {a = 1, b = 2});
t.Add(new Test {a = 3, b = 4});
var key = "e";
var rtest = redisClient.As<Test>();
rtest.Store(t[0]).show();
Console.WriteLine(t[0].GetId());
var q = rtest.GetById(t[0].GetId());
}
Console.ReadKey();
}
我也试过使用redis列表。
IRedisList<Test> tl = rtest.Lists["testl"];
tl.Add(new Test { a = 1, b = 2 });
tl.Add(new Test { a = 3, b = 4 });
var rlist = rtest.Lists["testl"];
但同样的事情也发生在这种情况下。它存储空对象。
我是 windows 上的 Redis 新手,我可能犯了一些错误。但我无法让它工作。任何帮助将不胜感激。
默认情况下 ServiceStack.Text 序列化器只存储 public 属性 所以你需要转换你的 字段 class 您希望序列化为属性,例如:
internal class Test
{
public int a { get; set; }
public int b { get; set; }
public string s { get; set; }
public void show()
{
Console.WriteLine(a + " " + b + " " + s);
}
}
或者您可以更改文本序列化程序以同时序列化 public 字段 并使用:
JsConfig.IncludePublicFields = true;