Redis是什麼:內存型數據庫,內存取數據與db硬盤取數據.......速度沒得比,啥 內存,我直接建立變量就OK了嘛,用redis 幹嗎,抱歉我只會開車,沒法解答。redis
爲何使用 :在一些高併發業務場景下,無數的請求訪問數據,這時候數據庫就可能會掛掉。使用redis 超快響應。數據庫
缺點 : 內存嘛,關機就沒了。宕機.....客戶的數據沒了。緩存
Redis和Memcache區別:安全
一、Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用於緩存其餘東西,例如圖片、視頻等等;數據結構
二、Redis不單單支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲;併發
三、虛擬內存--Redis當物理內存用完時,能夠將一些好久沒用到的value 交換到磁盤;分佈式
四、過時策略--memcache在set時就指定,例如set key1 0 0 8,即永不過時。Redis能夠經過例如expire 設定,例如expire name 10;高併發
五、分佈式--設定memcache集羣,利用magent作一主多從;redis能夠作一主多從。均可以一主一從;工具
六、存儲數據安全--memcache掛掉後,數據沒了;redis能夠按期保存到磁盤(持久化);post
七、災難恢復--memcache掛掉後,數據不可恢復; redis數據丟失後能夠經過aof恢復;
八、Redis支持數據的備份,即master-slave模式的數據備份;
步驟:
-------------------------------------------------------------------------------------------------------------------------------
1.下載好人甲提供的安裝包,安裝redis服務 + 管理工具 (.msi + manager.exe)
https://pan.baidu.com/s/1dFJD217;#list/path=%2F
2.Vs 上 使用nuget 安裝 StackExchange.Redis;(下載不了就更新一下nuget 工具 》 擴展更新 》更新 nuget)
3.打開 管理工具 「RedisDesktopManager」,查看數據。 運行一下代碼看看輸出窗口 (MVC 輸出窗口)
ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("127.0.0.1:6379,password=CeshiPassword");
public ActionResult Index()
{
var db = conn.GetDatabase();
string doKey = "doKey";
if (!db.KeyExists(doKey))
{
Response.Write("<script>alert('秒殺商品已經售完')</script>");
}
else
{
if (DateTime.Now > Convert.ToDateTime("2018-07-03 16:14"))
{
string shop = db.ListLeftPop(doKey);
Response.Write("<script>alert('" + "秒殺 成功,獎品爲" + shop + "')</script>");
}
else
{
Response.Write("<script>alert('秒殺時間還沒有開始')</script>");
}
}
return View();
#region Strings命令
//string key = "keyTest1";
////SET命令
//db.StringSet(key, "10");
////GET命令
//string value = db.StringGet(key);
//System.Diagnostics.Debug.WriteLine(value);
////APPEND命令
//db.StringAppend(key, "10");
//value = db.StringGet(key);
//System.Diagnostics.Debug.WriteLine(value);
////有第二個參數(整數,參看StringIncrement方法)爲DECRBY命令
////沒有第二個參數爲DECR命令
//db.StringDecrement(key);
//value = db.StringGet(key);
//System.Diagnostics.Debug.WriteLine(value);
////有第二個參數爲INCRBY命令
////沒有第二個參數爲INCR命令
//db.StringIncrement(key, 2);
//value = db.StringGet(key);
//System.Diagnostics.Debug.WriteLine(value);
//string key2 = "keyTest";
////SETEX命令,帶過時時間
//db.StringSet(key2, "keyTest2", new TimeSpan(0, 0, 5));
//string value2 = db.StringGet(key2);
//System.Diagnostics.Debug.WriteLine(value2);
//Thread.Sleep(5 * 1000);
////超過5s後,查不到該值
//value2 = db.StringGet(key2);
//System.Diagnostics.Debug.WriteLine("5s later:" + value2);
////GETSET命令,讀出原來的值,並附新值
////下面兩個是測試
//value = db.StringGetSet(key, "2000");
//System.Diagnostics.Debug.WriteLine(value);
//value = db.StringGet(key);
//System.Diagnostics.Debug.WriteLine(value);
////MSET命令
//db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] {
// new KeyValuePair<RedisKey, RedisValue>("key1", "value1"),
// new KeyValuePair<RedisKey, RedisValue>("key2", "value2"), });
////MGET命令
//RedisValue[] values = db.StringGet(new RedisKey[] { "key1", "key2" });
//System.Diagnostics.Debug.WriteLine(values[0] + "&&" + values[1]);
#endregion
#region Hash命令
//string key = "mykey";
////避免key重複
//db.KeyDelete(key);
////HSET命令
//db.HashSet(key, "a", "1");
////HGET命令
//string value = db.HashGet(key, "a");
//System.Diagnostics.Debug.WriteLine(value);
////HMSET
//db.HashSet(key, new HashEntry[] { new HashEntry("b", "2"), new HashEntry("c", "3") });
////HMGET
//HashEntry[] values = db.HashGetAll(key);
//System.Diagnostics.Debug.WriteLine(values[0].Name + "///" + values[0].Value);
////HDEL
//db.HashDelete(key, "c");
//string valuec = db.HashGet(key, "c");
//System.Diagnostics.Debug.WriteLine("c:" + valuec);
////HEXISTS
//System.Diagnostics.Debug.WriteLine(db.HashExists(key, "a"));
#endregion
#region List命令
//string key = "mykey";
//db.KeyDelete(key);
////LPUSH
//long index = db.ListLeftPush(key, "test");
////LINDEX,index返回總的長度,index必須減一
//string value = db.ListGetByIndex(key, index - 1);
//System.Diagnostics.Debug.WriteLine(value);
////LINSTER
//long index2 = db.ListInsertAfter(key, "test", "testright");
//string value2 = db.ListGetByIndex(key, index2 - 1);
//System.Diagnostics.Debug.WriteLine(value2);
//long index3 = db.ListInsertBefore(key, "test", "testleft");
//string value3 = db.ListGetByIndex(key, index - 1);
////LRANGE
//RedisValue[] values = db.ListRange(key);
//System.Diagnostics.Debug.WriteLine("values:begin");
//values.ToList().ForEach((v) =>
//{
// System.Diagnostics.Debug.WriteLine(v);
//});
//System.Diagnostics.Debug.WriteLine("values:end");
////LREM
//long index4 = db.ListRemove(key, "test");
//values = db.ListRange(key);
//System.Diagnostics.Debug.WriteLine("values2:begin");
//values.ToList().ForEach((v) =>
//{
// System.Diagnostics.Debug.WriteLine(v);
//});
//System.Diagnostics.Debug.WriteLine("values2:end");
////LPOP
////string value5 = db.ListLeftPop(key);
////System.Diagnostics.Debug.WriteLine(value5);
////values = db.ListRange(key);
////System.Diagnostics.Debug.WriteLine("values3:begin");
////values.ToList().ForEach((v) =>
////{
//// System.Diagnostics.Debug.WriteLine(v);
////});
////System.Diagnostics.Debug.WriteLine("values3:end");
////System.Diagnostics.Debug.WriteLine(value3);
//string value6 = db.ListRightPop(key);
//System.Diagnostics.Debug.WriteLine(value6);
//values = db.ListRange(key);
//System.Diagnostics.Debug.WriteLine("value6:begin");
//values.ToList().ForEach((v) =>
//{
// System.Diagnostics.Debug.WriteLine(v);
//});
//System.Diagnostics.Debug.WriteLine("value6:end");
//System.Diagnostics.Debug.WriteLine(value6);
#endregion
return View();
}
public ActionResult add() { var db = conn.GetDatabase(); db.ListLeftPush("doKey", "superShop1"); db.ListLeftPush("doKey", "superShop2"); db.ListLeftPush("doKey", "superShop3"); db.ListLeftPush("doKey", "superShop4"); db.ListLeftPush("doKey", "superShop5"); return View(); }