redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。[1]
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。
redis的官網地址,非常好記,是redis.io。(特意查了一下,域名后綴io屬於國家域名,是british Indian Ocean territory,即英屬印度洋領地)
一 一個Repository數據庫操作基類,提供了通用的操作屬性和方法
1 namespace Data 2 { 3 public abstract class RepositoryBase 4 { 5 protected static RedisClient_SortedSet redisClient = new RedisClient_SortedSet(); 6 public static DataClasses1DataContext db = new DataClasses1DataContext(); 7 } 8 }
二 接口定義操作規范
1 namespace Data 2 { 3 /// <summary> 4 /// 接口規范 5 /// </summary> 6 /// <typeparam name="TEntity"></typeparam> 7 public interface IRepository<TEntity> where TEntity : class 8 { 9 IQueryable<TEntity> GetModel(); 10 } 11 }
三 提供不同的實現接口的方式
1 namespace Data.Sql //使用SQL實現查詢 2 { 3 public class PersonRepository : RepositoryBase, IRepository<Res_Item> 4 { 5 #region IRepository<Res_Item> 成員 6 7 public IQueryable<Res_Item> GetModel() 8 { 9 return db.Res_Item.Select(i => new Res_Item_Ext 10 { 11 ID = i.ID, 12 Name = i.Name, 13 PackageTime = i.PackageTime, 14 }); 15 } 16 17 #endregion 18 } 19 } 20 21 namespace Data.Redis //使用Redis實現查詢 22 { 23 public class PersonRepository : RepositoryBase, IRepository<Res_Item> 24 { 25 26 #region IRepository<Res_Item> 成¨|員?à 27 28 public IQueryable<Res_Item> GetModel() 29 { 30 return redisClient.GetList("Res_Item").Cast<Res_Item>().ToList().AsQueryable(); 31 } 32 33 #endregion 34 } 35 }
四 實體類,由於要被序列化,所以redis需要你的實體類標有Serializable特性
1 [Serializable] 2 public partial class Res_Item { } 3 [Serializable] 4 public class Res_Item_Ext : Res_Item 5 { 6 7 }
五 如何在BLL層去調用你的redis數據庫
1 #region 從數據庫中建立一個redis緩存對象 2 3 try 4 { 5 rds.SelectDB(2); 6 new Data.Sql.PersonRepository().GetModel().Take(10).ToList().ForEach(i => 7 { 8 rds.Add("Res_Item", i.ID, i); 9 10 }); 11 rds.BackgroundSave();//異步序列化到磁盤 12 } 13 catch (Exception) 14 { 15 16 throw; 17 } 18 #endregion 19 20 #region 21 new Data.Redis.PersonRepository().GetModel().ToList().ForEach(i => Console.WriteLine(i.ID + i.Name + i.PackageTime)); 22 #endregion