5.html
4.git
String能夠包含任何數據,好比jpg圖片或者序列化的對象;string類型是Redis最基本的數據類型,一個鍵最大能存儲512MBgithub
Hashes 是一個string類型的field和value的映射表,hash特別適合用於存儲對象;redis
List列表類型能夠存儲一個有序的字符串列表,經常使用的操做時向列表兩端添加元素,或者得到列表的某一個片斷;列表類型內部是使用雙向鏈表(double linked list)實現的,因此向列表兩端添加元素的時間複雜度爲O(I),獲取越接近兩端的元素,速度就越快。數據庫
列表具備有序性,集合具備惟一性。windows
集合Set:多個集合類型鍵之間還能夠進行並集、交集、差集運算。緩存
有序集合Sort-Set...app
3.ide
Redis是一個用的比較普遍的Key/Value的內存數據庫,新浪微博、Github、StackOverflow 等大型應用中都用其做爲 高速緩存。wordpress
Redis自己沒有提供Windows版本的,而且在Windows上也不太穩定,通常都將其部署到Linux環境下,Redis能夠在其官網上下載
Beetle.Redis雖然不夠完整,可是我說幾個優勢:
一、底層很是穩定,幾乎沒有性能損耗。
二、鏈接數很是穩定,我用了整整一個月(通過了雙十一的考驗),一點問題都沒有。
三、代碼量很小,只有十幾個類,徹底開源。
2.
RedisHelper幫助類
public class RedisManager { private static PooledRedisClientManager prcm; /// <summary> /// 建立連接池管理對象 /// </summary> private static void CreateManager() { string[] writeServerList = SplitString(RedisConfigInfo.WriteServerList, ","); string[] readServerList = SplitString(RedisConfigInfo.ReadServerList, ","); prcm = new PooledRedisClientManager(readServerList, writeServerList, new RedisClientManagerConfig { MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize, MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize, AutoStart = RedisConfigInfo.AutoStart, }); } private static string[] SplitString(string strSource, string split) { return strSource.Split(split.ToArray()); } /// <summary> /// 客戶端緩存操做對象 /// </summary> public static IRedisClient GetClient() { if (prcm == null) CreateManager(); return prcm.GetClient(); } /// <summary> /// 緩存默認24小時過時 /// </summary> public static TimeSpan expiresIn = TimeSpan.FromHours(24); /// <summary> /// 設置一個鍵值對,默認24小時過時 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="value"></param> /// <param name="redisClient"></param> /// <returns></returns> public static bool Set<T>(string key, T value, IRedisClient redisClient) { return redisClient.Set<T>(key, value, expiresIn); } /// <summary> /// 將某類數據插入到list中 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key">通常是BiaoDiGuid</param> /// <param name="item"></param> /// <param name="redisClient"></param> public static void Add2List<T>(string key, T item, IRedisClient redisClient) { var redis = redisClient.As<T>(); var list = redis.Lists[GetListKey(key)]; list.Add(item); } /// <summary> /// 獲取一個list /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="redisClient"></param> /// <returns></returns> public static IRedisList<T> GetList<T>(string key, IRedisClient redisClient) { var redis = redisClient.As<T>(); return redis.Lists[GetListKey(key)]; } public static string GetListKey(string key, string prefix = null) { if (string.IsNullOrEmpty(prefix)) { return "urn:" + key; } else { return "urn:" + prefix + ":" + key; } } }
配置設置
3.3將參數寫入配置文件 <appSettings> <add key="WriteServerList" value="127.0.0.1:6379" /> <add key="ReadServerList" value="127.0.0.1:6379" /> <add key="MaxWritePoolSize" value="60" /> <add key="MaxReadPoolSize" value="60" /> <add key="AutoStart" value="true" /> <add key="LocalCacheTime" value="1800" /> <add key="RecordeLog" value="false" /> </appSettings> 3.4讀取配置文件參數類 public class RedisConfigInfo { public static string WriteServerList = ConfigurationManager.AppSettings["WriteServerList"]; public static string ReadServerList = ConfigurationManager.AppSettings["ReadServerList"]; public static int MaxWritePoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxWritePoolSize"]); public static int MaxReadPoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxReadPoolSize"]); public static int LocalCacheTime = Convert.ToInt32(ConfigurationManager.AppSettings["LocalCacheTime"]); public static bool AutoStart = ConfigurationManager.AppSettings["AutoStart"].Equals("true") ? true : false; }
使用:
protected void btn1_Click(object sender, EventArgs e) { string UserName; //讀取數據,若是緩存存在直接從緩存中讀取,不然從數據庫讀取而後寫入redis using (var redisClient = RedisManager.GetClient()) { UserName = redisClient.Get<string>("UserInfo_123"); if (string.IsNullOrEmpty(UserName)) //初始化緩存 { //TODO 從數據庫中獲取數據,並寫入緩存 UserName = "張三"; redisClient.Set<string>("UserInfo_123", UserName, DateTime.Now.AddSeconds(10)); lbtest.Text = "數據庫數據:" + "張三"; return; } lbtest.Text = "Redis緩存數據:" + UserName; } }
Redis自己沒有提供Windows版本的,而且在Windows上也不太穩定,通常都將其部署到Linux環境下,Redis能夠在其官網上下載, MSOpenTech中提供了Windows版本,這裏爲了學習安裝這一版本。
點擊跳轉到Github後,直接點擊Zip下載。下載後根據本身計算機的版本選擇32位或者64位進行安裝。我將64位的解壓後放到D:\Redis文件夾下,同時將文件夾內的redis.conf也拷貝到該目錄下,這個是redis的配置信息:
在Windows下面啓用Redis和啓動MogoDB同樣,須要使用命令行啓動,首先定位到該目錄,運行以下命令:
D:\Redis>redis-server.exe redis.conf
由於是在本機運行的,這裏要注意端口號,同時要保持端口不要關閉。
固然您也能夠將Redis做爲Windows服務在後臺一直開啓。
如今再開一個控制檯應用程序鏈接以前啓動的Redis,以下:
D:\Redis>redis-cli.exe -h 172.16.147.121 -p 6379
其中 –h後面是本機的ip地址,後面的是端口。
而後就能夠執行set 給key爲city賦值:
redis 172.16.147.121:6379> set city Shanghai
經過get能夠獲取指定key爲city的值了。
redis 172.16.147.121:6379> get city
同時,在咱們往redis上寫數據的時候,Redis服務也會定時的往文件中寫數據
這裏僅簡單的介紹了get和set命令,更多命令能夠查看 http://redis.io/commands
和MongoDB同樣,在.NET中使用Redis其實也是使用第三方驅動,官網推薦的是使用ServiceStack.Redis 下載後解壓獲得以下dll
新建一個Console程序,引用上一步驟解壓的四個dll。
作一個簡單的例子,在.NET中獲取以前咱們設置的city的值。
class Program { static RedisClient redisClient = new RedisClient("172.16.147.121", 6379);//redis服務IP和端口 static void Main(string[] args) { Console.WriteLine(redisClient.Get<string>("city")); Console.ReadKey(); } }
首先經過 static RedisClient redisClient = new RedisClient("172.16.147.121", 6379);
創建鏈接 ,而後就能夠直接用redisClient裏面的Get方法獲取 key爲city的值了。
在前面的命令行中,咱們網city中存入了Shanghai,如今咱們獲取到了這個值。
ServerStack中有不少方法能夠在.NET中調用,其類結構圖以下:
本文簡單介紹了Redis,Redis如何在Windows下安裝,以及如何在.NET中使用訪問和使用Redis,但願對您有所幫助,下文將講解如何在.NET中網Redis中讀寫複雜對象。