zoukankan      html  css  js  c++  java
  • Redis系列(一)StackExchange.Redis的使用

    Redis系列(一)StackExchange.Redis的使用

    一、DLL安装

        用NuGet搜索StackExchange.Redis,然后下载就可以。
        ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,不要在每个操作中不停的创建该对象的实例,所以使用单例来创建和存放这个对象。
        代码:

    private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("127.0.0.1" + ":" + "6379");
            private static readonly object Locker = new object(); 
         private static ConnectionMultiplexer redisConn;
           
            /// <summary>
            /// 单例获取
            /// </summary>
            public static ConnectionMultiplexer RedisConn
            {
                get
                {
                    if (redisConn == null)
                    {
                        lock (Locker)
                        {
                            if (redisConn == null || !redisConn.IsConnected)
                            {
                                redisConn = ConnectionMultiplexer.Connect(configurationOptions);
                            }
                        }
                    }
                    return redisConn;
                }
            }
    

        

    IDatabase db = redis.GetDatabase();
    

      这里的GetDatabase() 返回的db对象是很轻量级别的,不需要被缓存起来,每次用每次取即可。IDatabase 的所有方法都有同步和异步的实现。其中的异步实现都是可以await的。

    二、Strings的相关方法

        具体代码:   

    var db = conn.GetDatabase();
           #region Strings命令
           string key = "keyTest1";
           //SET命令
           db.StringSet(key, "10");
           //GET命令
           string value = db.StringGet(key);
           Console.WriteLine(value);
           //APPEND命令
           db.StringAppend(key, "10");
           value = db.StringGet(key);
           Console.WriteLine(value);
           //有第二个参数(整数,参看StringIncrement方法)为DECRBY命令
           //没有第二个参数为DECR命令
           db.StringDecrement(key);
           value = db.StringGet(key);
           Console.WriteLine(value);
           //有第二个参数为INCRBY命令
           //没有第二个参数为INCR命令
           db.StringIncrement(key, 2);
           value = db.StringGet(key);
           Console.WriteLine(value);
           string key2 = "keyTest";
           //SETEX命令,带过期时间
           db.StringSet(key2, "keyTest2", new TimeSpan(0, 0, 5));
           string value2 = db.StringGet(key2);
           Console.WriteLine(value2);
           Thread.Sleep(5 * 1000);
           //超过5s后,查不到该值
           value2 = db.StringGet(key2);
           Console.WriteLine("5s later:" + value2);
           //GETSET命令,读出原来的值,并附新值
           //下面两个是测试
           value = db.StringGetSet(key, "2000");
           Console.WriteLine(value);
           value = db.StringGet(key);
           Console.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" });
           Console.WriteLine(values[0] + "&&" + values[1]);
           #endregion
    

      运行结果:

    三、Hashes的相关方法

    具体代码:

    var db = conn.GetDatabase();
           #region Hash命令
           string key = "mykey";
           //避免key重复
           db.KeyDelete(key);
           //HSET命令
           db.HashSet(key, "a", "1");
           //HGET命令
           string value = db.HashGet(key, "a");
           Console.WriteLine(value);
           //HMSET
           db.HashSet(key, new HashEntry[] { new HashEntry("b", "2"), new HashEntry("c", "3") });
           //HMGET
           HashEntry[] values = db.HashGetAll(key);
           Console.WriteLine(values[0].Name + "///" + values[0].Value);
           //HDEL
           db.HashDelete(key, "c");
           string valuec = db.HashGet(key, "c");
           Console.WriteLine("c:" + valuec);
           //HEXISTS
           Console.WriteLine(db.HashExists(key, "a"));
           #endregion
    

      运行结果:

    四、Lists的相关方法

    具体代码:

    var db = conn.GetDatabase();
          #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);
          Console.WriteLine(value);
          //LINSTER
          long index2 = db.ListInsertAfter(key, "test", "testright");
          string value2 = db.ListGetByIndex(key, index2 - 1);
          Console.WriteLine(value2);
          long index3 = db.ListInsertBefore(key, "test", "testleft");
          string value3 = db.ListGetByIndex(key, index - 1);
          //LRANGE
          RedisValue[] values = db.ListRange(key);
          Console.WriteLine("values:begin");
          values.ToList().ForEach((v) =>
          {
              Console.WriteLine(v);
          });
          Console.WriteLine("values:end");
          //LREM
          long index4 = db.ListRemove(key, "test");
          values = db.ListRange(key);
          Console.WriteLine("values2:begin");
          values.ToList().ForEach((v) =>
          {
              Console.WriteLine(v);
          });
          Console.WriteLine("values2:end");
          //LPOP
          string value5 = db.ListLeftPop(key);
          Console.WriteLine(value5);
          values = db.ListRange(key);
          Console.WriteLine("values3:begin");
          values.ToList().ForEach((v) =>
          {
              Console.WriteLine(v);
          });
          Console.WriteLine("values3:end");
          Console.WriteLine(value3);
          #endregion
    

      运行结果:

    五、最后

    现在只简单学会使用Strings、Hashes和Lists,还有很多以后再研究使用。

    备注:

      文章系转载:http://www.cnblogs.com/weixiao520/p/5765358.html

  • 相关阅读:
    php备份数据库类分享
    nginx https配置后无法访问,可能防火墙在捣鬼
    linux服务器,svn认证失败,配置问题,防火墙等等
    为了解决linux配置Nginx 只能关闭防火墙才能访问的问题
    nginx 防火墙、权限问题
    思数云hadoop目录
    delete
    善用GIMP(Linux下的Photoshop),图像处理轻松又自由
    超赞干货!2016年新鲜出炉的20款网页开发工具推荐
    10款Web前端工具
  • 原文地址:https://www.cnblogs.com/sunice/p/6605031.html
Copyright © 2011-2022 走看看