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(); }