如果我们储存的对象为数组或集合,我们可以采用转json的方法开存储。
保存
var objStr = JsonConvert.SerializeObject(postList);//这里的postList为数据库取出的对象集合
byte[] bytes = Encoding.UTF8.GetBytes(objStr);
db.StringSet(dbKey, bytes, TimeSpan.FromMinutes(5));
取出
if (db.KeyExists(dbKey))
{
var resStr = db.StringGet(dbKey);
var resStrEncoding = Encoding.UTF8.GetString(resStr);
var res = JsonConvert.DeserializeObject<List<Post>>(resStr);
}
对于没那么复杂的对象我们的hash就更好用了
public class RedisHelper
{
public static HashEntry[] ToHashEnties(object obj)
{
PropertyInfo[] properties = obj.GetType().GetProperties();
return properties.Select(proterty => new HashEntry(proterty.Name, proterty.GetValue(obj).ToString())).ToArray();
}
public static T ConvertFromRedis<T>(HashEntry[] hashEntries)
{
PropertyInfo[] properties = typeof(T).GetProperties();
var obj = Activator.CreateInstance(typeof(T));
foreach (var property in properties)
{
HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(property.Name));
if (entry.Equals(new HashEntry()))
{
continue;
}
property.SetValue(obj, Convert.ChangeType(entry.Value.ToString(), property.PropertyType));
}
return (T)obj;
}
}