使用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;      

   }

posted @ 2015-03-26 14:03  ip8888  阅读(974)  评论(0编辑  收藏  举报