<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .NET中Redis安裝部署及使用方法簡介附->開源Redis操作輔助類

        

        Redis是一個用的比較廣泛的Key/Value的內存數據庫,新浪微博、Github、StackOverflow 等大型應用中都用其作為緩存,Redis的官網為http://redis.io/

        Redis 是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
        Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
        Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。

        在這篇文章中我們將記錄一下Redis的安裝,以及如何在.NET中使用Redis。

        工具下載位置:http://pan.baidu.com/s/1jILIzLs,包括服務端配置以及查看緩存的工具。

       一、Redis服務端以服務方式運行

        服務端是以服務的形式運行,將Redis服務端解壓到某個目錄,然后以管理員方式運行cmd執行命令進行安裝:

      redis-server.exe --service-install redis.windows.conf --loglevel verbose

        注意卸載服務的命令為:

      redis-server.exe --service-uninstall redis.windows.conf --loglevel verbose

        注意事項,修改Redis端口及密碼的配置在文件redis.windows-service.conf中:(使用redis284.rar中解壓文件

      修改端口,壓縮文件中配置的是6488:

      修改密碼

      修改庫的數量

      配置完成后,執行

      redis-server.exe --service-install redis.windows.conf --loglevel verbose

      到控制面板查看服務已經安裝成功了,注意首次安裝時默認沒有啟動,單擊啟動即可。

       工具配置,安裝后如下圖

      連接成功后,就可以查看緩存中的數據了

       二、Redis服務端以控制臺方式運行

        解壓下載的redis64-2.6.12.1.rar文件,如下圖:

        第一步(配置本地服務)

        點擊run這個DOS執行命令
        因為是自己的電腦測試的,所以這個Redis默認的端口我們就不用修改了,如果到了正式的服務器,一定要修改端口號,防止黑客攻擊,獲取到你的數據,畢竟信息安全很重要,可以通過它的配置文件來修改。
       
      看下用NotePad++打開配置文件,修改過后的效果圖,這里我修改成了6380這個端口
      這個就是更改過后的效果圖了,只要改了端口,再啟動run就可以發現端口號確實已經變了,第一步也已經完成了。

      第二部(安裝和配置客戶端)

      文件中的“redis-desktop-manager-0.8.2.3849.exe“是2015-11-23 從Redis的官網下載的客戶端安裝包,如果有更新可以去官網下載最新的Redis,這是鏈接:http://redis.io/

      1.點擊客戶端安裝程序,下一步....,完成打開客戶端界面就可以了,省略安裝截圖。

        2.打開界面,客戶端默認讀取到6379的端口,會創建一個6379的Redis服務器

        由于我更改了6379的端口號,導致Redis客戶端默認創建的localhost服務器啟動不成功,這里只需要右擊修改一下端口號就可以了。

      三、C#訪問Redis

      下載ServiceStack.Redis

      和MongoDB一樣,在.NET中使用Redis其實也是使用第三方驅動,官網推薦的是使用ServiceStack.Redis 下載后解壓得到如下dll

      .NET項目中使用Redis

      ServerStack中有很多方法可以在.NET中調用,其類結構圖如下:

       

      Redis公共類庫參考

      using System;
      using System.Collections.Generic;
      using System.Linq;
      
      namespace RDIFramework.Utilities
      {
          using ServiceStack.Redis;
          using ServiceStack.Redis.Generic;
      
          /// <summary>
          /// Redis公共輔助類庫
          /// </summary>
          public class RedisHelper : IDisposable
          {
              public RedisClient Redis = new RedisClient("127.0.0.1", 6379);
              //緩存池
              PooledRedisClientManager prcm = new PooledRedisClientManager();
      
              //默認緩存過期時間單位秒
              public int secondsTimeOut = 30 * 60;
      
              /// <summary>
              /// 緩沖池
              /// </summary>
              /// <param name="readWriteHosts"></param>
              /// <param name="readOnlyHosts"></param>
              /// <returns></returns>
              public static PooledRedisClientManager CreateManager(
               string[] readWriteHosts, string[] readOnlyHosts)
              {
                  return new PooledRedisClientManager(readWriteHosts, readOnlyHosts,
                      new RedisClientManagerConfig
                      {
                          MaxWritePoolSize = readWriteHosts.Length * 5,
                          MaxReadPoolSize = readOnlyHosts.Length * 5,
                          AutoStart = true,
                      });// { RedisClientFactory = (IRedisClientFactory)RedisCacheClientFactory.Instance.CreateRedisClient("127.0.0.1", 6379) };           
              }
              /// <summary>
              /// 構造函數
              /// </summary>
              /// <param name="openPooledRedis">是否開啟緩沖池</param>
              public RedisHelper(bool openPooledRedis = false)
              {
                  if (openPooledRedis)
                  {
                      prcm = CreateManager(new string[] { "127.0.0.1:6379" }, new string[] { "127.0.0.1:6379" });
                      Redis = prcm.GetClient() as RedisClient;
                  }
              }
      
              #region Key/Value存儲
              /// <summary>
              /// 設置緩存
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="key">緩存建</param>
              /// <param name="t">緩存值</param>
              /// <param name="timeout">過期時間,單位秒,-1:不過期,0:默認過期時間</param>
              /// <returns></returns>
              public bool Set<T>(string key, T t, int timeout = 0)
              {
                  if (timeout >= 0)
                  {
                      if (timeout > 0)
                      {
                          secondsTimeOut = timeout;
                      }
                      Redis.Expire(key, secondsTimeOut);
                  }
      
                  return Redis.Add<T>(key, t);
              }
              /// <summary>
              /// 獲取
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="key"></param>
              /// <returns></returns>
              public T Get<T>(string key)
              {
                  return Redis.Get<T>(key);
              }
              /// <summary>
              /// 刪除
              /// </summary>
              /// <param name="key"></param>
              /// <returns></returns>
              public bool Remove(string key)
              {
                  return Redis.Remove(key);
              }
      
              public bool Add<T>(string key, T t, int timeout)
              {
                  if (timeout >= 0)
                  {
                      if (timeout > 0)
                      {
                          secondsTimeOut = timeout;
                      }
                      Redis.Expire(key, secondsTimeOut);
                  }
                  return Redis.Add<T>(key, t);
              }
              #endregion
      
              #region 鏈表操作
              /// <summary>
              /// 根據IEnumerable數據添加鏈表
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="listId"></param>
              /// <param name="values"></param>
              /// <param name="timeout"></param>
              public void AddList<T>(string listId, IEnumerable<T> values, int timeout = 0)
              {
                  Redis.Expire(listId, 60);
                  IRedisTypedClient<T> iredisClient = Redis.As<T>();
                  if (timeout >= 0)
                  {
                      if (timeout > 0)
                      {
                          secondsTimeOut = timeout;
                      }
                      Redis.Expire(listId, secondsTimeOut);
                  }
                  var redisList = iredisClient.Lists[listId];
                  redisList.AddRange(values);
                  iredisClient.Save();
              }
              /// <summary>
              /// 添加單個實體到鏈表中
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="listId"></param>
              /// <param name="Item"></param>
              /// <param name="timeout"></param>
              public void AddEntityToList<T>(string listId, T Item, int timeout = 0)
              {
                  IRedisTypedClient<T> iredisClient = Redis.As<T>();
                  if (timeout >= 0)
                  {
                      if (timeout > 0)
                      {
                          secondsTimeOut = timeout;
                      }
                      Redis.Expire(listId, secondsTimeOut);
                  }
                  var redisList = iredisClient.Lists[listId];
                  redisList.Add(Item);
                  iredisClient.Save();
              }
              /// <summary>
              /// 獲取鏈表
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="listId"></param>
              /// <returns></returns>
              public IEnumerable<T> GetList<T>(string listId)
              {
                  IRedisTypedClient<T> iredisClient = Redis.As<T>();
                  return iredisClient.Lists[listId];
              }
              /// <summary>
              /// 在鏈表中刪除單個實體
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="listId"></param>
              /// <param name="t"></param>
              public void RemoveEntityFromList<T>(string listId, T t)
              {
                  IRedisTypedClient<T> iredisClient = Redis.As<T>();
                  var redisList = iredisClient.Lists[listId];
                  redisList.RemoveValue(t);
                  iredisClient.Save();
              }
              /// <summary>
              /// 根據lambada表達式刪除符合條件的實體
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="listId"></param>
              /// <param name="func"></param>
              public void RemoveEntityFromList<T>(string listId, Func<T, bool> func)
              {
                  using (IRedisTypedClient<T> iredisClient = Redis.As<T>())
                  {
                      var redisList = iredisClient.Lists[listId];
                      T value = redisList.Where(func).FirstOrDefault();
                      redisList.RemoveValue(value);
                      iredisClient.Save();
                  }
              }
              #endregion
              //釋放資源
              public void Dispose()
              {
                  if (Redis != null)
                  {
                      Redis.Dispose();
                      Redis = null;
                  }
                  GC.Collect();
              }
          }
      }
      

       

       

      posted @ 2016-06-24 16:33  .NET快速開發框架  閱讀(1591)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 精品国精品国自产在国产| 久久精品第九区免费观看| 疯狂做受xxxx高潮欧美日本| 亚洲婷婷综合色高清在线| 一区二区亚洲人妻av| 固安县| 午夜福利国产精品视频| 狠狠亚洲色一日本高清色| 国产99青青成人A在线| 国产无遮挡性视频免费看| 纯肉高h啪动漫| 国产精品综合色区av| 97se亚洲国产综合在线| 台安县| 亚洲乱码一区二区三区视色| 国产精品久久久久久无毒不卡| 天天躁日日躁狠狠躁一区| 亚洲情A成黄在线观看动漫尤物| 石城县| 国产高清精品在线91| 日韩欧美精品suv| 亚洲国产日韩欧美一区二区三区| 浪潮av色综合久久天堂| 国产99re热这里只有精品| 中文字幕人妻无码一夲道| 日韩卡一卡2卡3卡4卡| 国产播放91色在线观看| 国产成人一卡2卡3卡四卡视频| 91福利视频一区二区| 伊金霍洛旗| 亚洲综合在线亚洲优优色| 国产精品午夜无码AV天美传媒| 国产欧美另类久久久精品不卡| 深夜精品免费在线观看| 国产口爆吞精在线视频2020版| 亚洲精品综合久中文字幕| 国产小受被做到哭咬床单GV| 中文字幕av无码不卡| 欧美一区二区三区成人久久片| 亚洲精品成人区在线观看| 国产精品成人中文字幕|