C# Redis在缓存中存储空对象
我正试图为我的c#项目实现一个redis缓存。我使用了redisClientredisClient,它可以很好地存储int和string之类的普通数据类型,但不能存储对象。然后我移动到RedisTypedClient,它应该在redis中存储我的对象,但它存储一个空对象。当我试图检索那个对象时,它会创建一个新对象并返回它 这是我的测试代码,我正试图让它工作,但它不工作C# Redis在缓存中存储空对象,c#,caching,redis,servicestack,redisclient,C#,Caching,Redis,servicestack,Redisclient,我正试图为我的c#项目实现一个redis缓存。我使用了redisClientredisClient,它可以很好地存储int和string之类的普通数据类型,但不能存储对象。然后我移动到RedisTypedClient,它应该在redis中存储我的对象,但它存储一个空对象。当我试图检索那个对象时,它会创建一个新对象并返回它 这是我的测试代码,我正试图让它工作,但它不工作 internal class Test { public int a; public int b; pu
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();
}
内部类测试
{
公共INTA;
公共int b;
公共字符串s;
公开展览(
{
控制台写入线(a+“”+b+“”+s);
}
}
公共课程
{
私有静态void Main(字符串[]args)
{
使用(var redisClient=new redisClient(“localhost”))
{
var t=新列表();
t、 添加(新测试{a=1,b=2});
t、 添加(新测试{a=3,b=4});
var key=“e”;
var rtest=redisClient.As();
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"];
IRedisList tl=rtest.Lists[“testl”];
tl.Add(新测试{a=1,b=2});
tl.Add(新测试{a=3,b=4});
var rlist=rtest.Lists[“testl”];
但在这种情况下也会发生同样的事情。它存储空对象
我是windows上redis的新手,可能犯了一些错误。但我无法让它工作。任何帮助都将不胜感激。默认情况下,序列化程序只存储公共属性,因此您需要将类中要序列化的字段转换为属性,例如:
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);
}
}
或者,您可以将文本序列化程序更改为同时序列化公共字段,方法是:
JsConfig.IncludePublicFields = true;
请注意,ServiceStack是受商业支持的产品。请参阅ServiceStack.net上的。