zoukankan      html  css  js  c++  java
  • 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,还有很多以后再研究使用。

  • 相关阅读:
    subtext 安装PythonIDE -Anaconda
    Python--DBUtil
    python操作oracle数据库-查询
    Python 离线工作环境搭建
    Scrapy-下载中间件
    centos安装 Anaconda3及使用
    Scrapy爬取人人网
    海明距离
    中心极限定理
    最大似然估计 (MLE)与 最大后验概率(MAP)在机器学习中的应用
  • 原文地址:https://www.cnblogs.com/weixiao520/p/5765358.html
Copyright © 2011-2022 走看看