使用redis for .net的一点建议
redis for .net用了几天,发现确实很灵活,它提供了物种数据结构供我们选择,组装,建模,因此,在C#中,你可以把基础数据组合过后再放到redis中,这里组装有两层含义:外部组装:比如将基元类型:string ,int ,datetime这些放进集合,数组,list,hashtable,然后,再搭积木一样在redis中重新组装(不论你在进入redis之前是什么类型,进入的时候都得向从空的集合添加元素一样,批量添加顶多到数组(集合)这一层次,然而redis还没有达到ado 这样的抽象,意思就是,如果你想把一行record,一个dataRow,一个DataColumn,一个DataTable,一个DataSet直接放进redis,这是错误的,必须拆成C# 基本类型或组装为C#集合类型(集合中不允许有任何抽象的ado对象,会报错),最重要的一点:和数据库的数据交互,同步等,最终是借助串的形式,字节数组的形式进行流动,这可以看成数据库之间的管道,但中间必须至少有一层做适配处理, 示例如下:
public string testComplexDadaTable()
{
string key = "key";
byte[] bytekey = System.Text.Encoding.Default.GetBytes(key);
using (RedisClient clientt = new RedisClient("127.0.0.1:6379"))
{
DataTable dt = GetDataTable();
var columns = dt.Columns;
var rows = dt.Rows;
List<DateTime> mydate = new List<DateTime>();
List<DataRow> datarow = new List<DataRow>();
Hashtable hashtable = new Hashtable();
for (int i = 0; i < rows.Count; i++)
{
DateTime test = (rows[i].Field<DateTime>(3));
mydate.Add(test);
string testby = test.ToString();
byte[] arrtext = System.Text.Encoding.Default.GetBytes(testby);
clientt.HSet("hashkey", bytekey, arrtext);
if(!hashtable.ContainsKey("key"))
{
hashtable.Add("key", test);
}
}
clientt.Get<DataRow>("row");
clientt.Set<List<DateTime>>("mydate", mydate);
}
RedisClient rdc = new RedisClient("127.0.0.1:6379");
var valueComplex = rdc.Get<List<DateTime>>("mydate");
var byteresult = rdc.HGet("hashkey", bytekey);
string constructedString = System.Text.Encoding.Default.GetString(byteresult);
return null; // clientt.LPush("redis:mysql:10086", null);
}
private DataTable GetDataTable()
{
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
// Here we add five DataRows.
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
return table;
}