• redis 的简单使用


     Redis是什么:内存型数据库,内存取数据与db硬盘取数据.......速度没得比,啥 内存,我直接创建变量就OK了嘛,用redis 干嘛,抱歉我只会开车,无法解答。

     为什么使用  :在一些高并发业务场景下,无数的请求访问数据,这时候数据库就可能会挂掉。使用redis 超快响应。

                缺点  : 内存嘛,关机就没了。宕机.....客户的数据没了。

    Redis和Memcache区别:

    1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;

    2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;

    3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

    4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;

    5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;

    6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);

    7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;

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

      

     
  • 相关阅读:
    [置顶] 当今世界最受人们重视的十大经典算法
    Android入门:调用WebService
    Android入门:实现一个File存储的辅助类
    多线程下载辅助类实现
    在Java程序中设置代理
    配置EditPlus使其可以编译运行java程序
    Android入门:文件上传
    Resource is out of sync with the file system
    【入门算法】思维导图
    sharepoint2010 重建服务器场的方法
  • 原文地址:https://www.cnblogs.com/j2ee-web-01/p/9263524.html
Copyright © 2020-2023  润新知