本篇記錄redis的第一期瞭解學習的過程,包括環境搭建、客戶端、可視化管理器等初步的瞭解,新手快速全方位的瞭解並上手redis。 redis是什麼我就不寫了,請自行去中文官網查閱 http://www.redis.cn/。 redis資源可在StackExchange.Redis客戶端的github ...
本篇記錄redis的第一期瞭解學習的過程,包括環境搭建、客戶端、可視化管理器等初步的瞭解,新手快速全方位的瞭解並上手redis。
redis是什麼我就不寫了,請自行去中文官網查閱 http://www.redis.cn/。
- 環境搭建
redis資源可在StackExchange.Redis客戶端的github上下載該客戶端源碼,RedisConfigs文件夾下自帶3.0版本資源包https://github.com/StackExchange/StackExchange.Redis,如果覺得源碼項目大可以到這個地址下載http://download.csdn.net/download/u010959946/10126608,我把該包獨立上傳了。
環境部署很簡單,幾句命令。首先把下載好的文件存放到要安裝的盤符中,然後打開控制台程式用cd命令進入到目標文件夾。輸入redis-server.exe redis.windows.conf 命令啟動redis服務載入配置文件。
輸入完回車就會出現一下畫面,說明redis服務已經啟動。
服務啟動完畢,開始連接。打開另一個控制台(不要關閉redis服務的控制台),同樣的方式進入目標文件夾,輸入redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456(或者只輸入redis-cli.exe)命令即可連接本地redis服務,其中6379是預設埠號,123456是預設密碼。連接成功可以通過set user zhangsan get user 等命令進行測試(命令詳情可訪問官網查看)。
2. 代碼實現(.net)
環境搭建完畢,通過控制台也能連接訪問這說明redis服務成功的在機器上運行了,更進一步我們通過一個demo去連接並操作redis。代碼實現需要客戶端支持,.net支持的redis客戶端在官網都有描述,這裡我只講下StackExchange.Redis。源碼地址上文已經給出,有興趣研究的可自行下載。這裡我簡單講下使用。打開vs創建一個控制台應用程式,右鍵該項目打開菜單中的管理nuget程式包。
瀏覽中搜索StackExchange.Redis並安裝
客戶端安裝完成,下麵就是使用。創建一個SERedisHelper類
/// <summary> /// Redis操作類 /// </summary> public class SERedisHelper { private static string _conn = ConfigurationManager.AppSettings["SERedis"] ?? "127.0.0.1:6379"; #region string類型 /// <summary> /// 根據Key獲取值 /// </summary> /// <param name="key">鍵值</param> /// <returns>System.String.</returns> public static string StringGet(string key) { try { using (var client = ConnectionMultiplexer.Connect(_conn)) { return client.GetDatabase().StringGet(key); } } catch (Exception) { return null; } } /// <summary> /// 批量獲取值 /// </summary> public static string[] StringGetMany(string[] keyStrs) { var count = keyStrs.Length; var keys = new RedisKey[count]; var addrs = new string[count]; for (var i = 0; i < count; i++) { keys[i] = keyStrs[i]; } try { using (var client = ConnectionMultiplexer.Connect(_conn)) { var values = client.GetDatabase().StringGet(keys); for (var i = 0; i < values.Length; i++) { addrs[i] = values[i]; } return addrs; } } catch (Exception) { return null; } } /// <summary> /// 單條存值 /// </summary> /// <param name="key">key</param> /// <param name="value">The value.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> public static bool StringSet(string key, string value) { using (var client = ConnectionMultiplexer.Connect(_conn)) { return client.GetDatabase().StringSet(key, value); } } /// <summary> /// 批量存值 /// </summary> /// <param name="keysStr">key</param> /// <param name="valuesStr">The value.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> public static bool StringSetMany(string[] keysStr, string[] valuesStr) { var count = keysStr.Length; var keyValuePair = new KeyValuePair<RedisKey, RedisValue>[count]; for (int i = 0; i < count; i++) { keyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(keysStr[i], valuesStr[i]); } using (var client = ConnectionMultiplexer.Connect(_conn)) { return client.GetDatabase().StringSet(keyValuePair); } } #endregion #region 泛型 /// <summary> /// 存值並設置過期時間 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key">key</param> /// <param name="t">實體</param> /// <param name="ts">過期時間間隔</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> public static bool Set<T>(string key, T t, TimeSpan ts) { var str = JsonConvert.SerializeObject(t); using (var client = ConnectionMultiplexer.Connect(_conn)) { return client.GetDatabase().StringSet(key, str, ts); } } /// <summary> /// /// 根據Key獲取值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key">The key.</param> /// <returns>T.</returns> public static T Get<T>(string key) where T : class { using (var client = ConnectionMultiplexer.Connect(_conn)) { var strValue = client.GetDatabase().StringGet(key); return string.IsNullOrEmpty(strValue) ? null : JsonConvert.DeserializeObject<T>(strValue); } } #endregion }
幫助類創建完畢,在Program.cs中使用即可。
var ts = new TimeSpan(0, 0, 1, 0, 1); Console.WriteLine("添加緩存"); SERedisHelper.Set<string>("user", "zhangsan", ts); Console.WriteLine("獲取緩存:" + SERedisHelper.Get<string>("user")); Console.ReadLine();
這裡註意低版本的redis過期時間不支持毫秒級,當然3.0沒問題。調試運行即可看到結果。
3. 總結
本篇旨在快速上手瞭解redis,如有問題請多指點。
最後貼出一點後續深入瞭解的資料(持續更新)
一個redis可視化管理工具RedisDesktopManager
http://download.csdn.net/download/u010959946/10126647。
StackExchange.Redis客戶端工具類 http://www.cnblogs.com/qtqq/p/5951201.html
再貼下官網地址http://www.redis.cn/topics/pipelining.html (官網總結的內容很全)。