很早之前的代码,回顾一下。在用redis的时候,希望将datatable储存起来。
大致如下:
#region datatable操作
/// <summary>
/// 插入Datatable缓存
/// </summary>
/// <param name="key"></param>
/// <param name="dt"></param>
/// <param name="seconds"></param>
public void SetMemByDataTable(string key, DataTable dt, int seconds)
{
DateTime expiryTime = DateTime.Now.AddSeconds(seconds);
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();//定义BinaryFormatter以序列化DataSet对象
System.IO.MemoryStream ms = new System.IO.MemoryStream();//创建内存流对象
formatter.Serialize(ms, dt);//把Datatable对象序列化到内存流
byte[] buffer = ms.ToArray();//把内存流对象写入字节数组
ms.Close();//关闭内存流对象
ms.Dispose();//释放资源
Redis.Set(key, buffer, expiryTime);
}
/// <summary>
/// 得到datatable
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public DataTable GetMemByDataSet(string key)
{
var item = Get(key);
return (DataTable)item;
}
/// <summary>
/// 根据key得到二进制数据流
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public object Get(string key)
{
byte[] buffer = Redis.Get(key);
return GetObjFromBytes(buffer);
}
private object GetObjFromBytes(byte[] buffer)
{
if (buffer == null)
{
return null;
}
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer))
{
stream.Position = 0;
System.Runtime.Serialization.IFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
Object reobj = bf.Deserialize(stream);
return reobj;
}
}
#endregion