C#Redis安裝與使用

来源:http://www.cnblogs.com/wuxiaohui/archive/2016/08/02/5730378.html
-Advertisement-
Play Games

Redis是一個用的比較廣泛的Key/Value的記憶體資料庫,也是最快的key-value分散式緩存之一。 Redis官網:http://redis.io/ Redis快速入門教程:http://www.yiibai.com/redis/redis_quick_guide.html 解壓版下載地址: ...


Redis是一個用的比較廣泛的Key/Value的記憶體資料庫,也是最快的key-value分散式緩存之一。

Redis官網:http://redis.io/

Redis快速入門教程:http://www.yiibai.com/redis/redis_quick_guide.html

解壓版下載地址:https://github.com/dmajkic/redis/downloads

安裝版下載地址:https://github.com/rgl/redis/downloads

ServiceStack.Redis:https://github.com/ServiceStack/ServiceStack.Redis

參考:

http://www.cnblogs.com/zhangweizhong/p/4969240.html

http://blog.csdn.net/qiujialongjjj/article/details/16945569

一、Redis安裝

選擇一個版本進行下載,壓縮包中包括32位和64位的安裝工具,或者直接使用安裝版的進行安裝,都是一樣的,這裡使用的是安裝版的,安裝結果如圖:

 

安裝完後會在系統服務中出現一個Redis Server的系統服務。

redis-server.exe:伺服器的daemon啟動程式。

redis.conf:配置文件。

redis-cli.exe:命令行客戶端。

redis-check-dump.exe:本地資料庫檢查

redis-check-aof.exe:更新日誌檢查

redis-benchmark.exe:性能測試工具,測試Redis在你的系統及你的配置下的讀寫性能。

二、Redis配置

1. port 埠號,例如6379

2. bind 實例綁定的訪問地址127.0.0.1

3. requirepass 訪問的密碼

4. maxheap 記得把這個配置節點打開,否者redis 服務無法啟動。例如maxheap 1024000000

5. timeout:請求超時時間

6. logfile:log文件位置

7. databases:開啟資料庫的數量

8. dbfilename:數據快照文件名(只是文件名,不包括目錄)

三、Redis使用

在Redis的安裝目錄下找到redis-cli.exe文件,雙擊啟動它:

測試OK,至此Redis安裝到此結束了,接下來是在C#中的實際運用。

 

二、Redis實戰

1.建立項目,引用ServiceStack.Redis相關的四個類庫。

2.配置文件

    <!-- redis Start   -->
    <add key="SessionExpireMinutes" value="180" />
    <add key="redis_server_session" value="127.0.0.1:6379" />
    <add key="redis_max_read_pool" value="3" />
    <add key="redis_max_write_pool" value="1" />
    <!--redis end-->

3.創建一個Redis操作的公用類RedisCacheHelper

using ServiceStack.Redis;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    class RedisCacheHelper
    {
        private static readonly PooledRedisClientManager pool = null;
        private static readonly string[] redisHosts = null;
        public static int RedisMaxReadPool = int.Parse(ConfigurationManager.AppSettings["redis_max_read_pool"]);
        public static int RedisMaxWritePool = int.Parse(ConfigurationManager.AppSettings["redis_max_write_pool"]);

        static RedisCacheHelper()
        {
            var redisHostStr = ConfigurationManager.AppSettings["redis_server_session"];

            if (!string.IsNullOrEmpty(redisHostStr))
            {
                redisHosts = redisHostStr.Split(',');

                if (redisHosts.Length > 0)
                {
                    pool = new PooledRedisClientManager(redisHosts, redisHosts,
                        new RedisClientManagerConfig()
                        {
                            MaxWritePoolSize = RedisMaxWritePool,
                            MaxReadPoolSize = RedisMaxReadPool,
                            AutoStart = true
                        });
                }
            }
        }

        public static void Add<T>(string key, T value, DateTime expiry)
        {
            if (value == null)
            {
                return;
            }

            if (expiry <= DateTime.Now)
            {
                Remove(key);

                return;
            }

            try
            {
                if (pool != null)
                {
                    using (var r = pool.GetClient())
                    {
                        if (r != null)
                        {
                            r.SendTimeout = 1000;
                            r.Set(key, value, expiry - DateTime.Now);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string msg = string.Format("{0}:{1}發生異常!{2}", "cache", "存儲", key);
            }

        }

        public static void Add<T>(string key, T value, TimeSpan slidingExpiration)
        {
            if (value == null)
            {
                return;
            }

            if (slidingExpiration.TotalSeconds <= 0)
            {
                Remove(key);

                return;
            }

            try
            {
                if (pool != null)
                {
                    using (var r = pool.GetClient())
                    {
                        if (r != null)
                        {
                            r.SendTimeout = 1000;
                            r.Set(key, value, slidingExpiration);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string msg = string.Format("{0}:{1}發生異常!{2}", "cache", "存儲", key);
            }

        }

        public static T Get<T>(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return default(T);
            }

            T obj = default(T);

            try
            {
                if (pool != null)
                {
                    using (var r = pool.GetClient())
                    {
                        if (r != null)
                        {
                            r.SendTimeout = 1000;
                            obj = r.Get<T>(key);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string msg = string.Format("{0}:{1}發生異常!{2}", "cache", "獲取", key);
            }


            return obj;
        }

        public static void Remove(string key)
        {
            try
            {
                if (pool != null)
                {
                    using (var r = pool.GetClient())
                    {
                        if (r != null)
                        {
                            r.SendTimeout = 1000;
                            r.Remove(key);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string msg = string.Format("{0}:{1}發生異常!{2}", "cache", "刪除", key);
            }

        }

        public static bool Exists(string key)
        {
            try
            {
                if (pool != null)
                {
                    using (var r = pool.GetClient())
                    {
                        if (r != null)
                        {
                            r.SendTimeout = 1000;
                            return r.ContainsKey(key);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string msg = string.Format("{0}:{1}發生異常!{2}", "cache", "是否存在", key);
            }

            return false;
        }

    }
}
View Code

4.程式測試

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Redis寫入緩存:");
            RedisCacheHelper.Add("name1", "test1", DateTime.Now.AddDays(1));

            Console.WriteLine("Redis獲取緩存:");
            string str = RedisCacheHelper.Get<string>("name1");
            Console.WriteLine(str);

            Console.ReadKey();
        }
    }
}
View Code

5.輸入結果

Demo下載

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 適用於: 本文適用於有一定微信開發基礎的用戶 引言: 花了300大洋申請了微信公眾平臺後,發現不能使用微信公眾號登錄網站(非微信打開)獲得微信帳號。仔細研究後才發現還要再花300大洋申請微信開放平臺才能接入網站的登錄。於是做為屌絲程式員的我想到了自己做一個登錄介面。 工具和環境: 1. VS2013 ...
  • 策略一:資料庫不存在時重新創建資料庫 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>()); Database.SetInitializer<testContext>(new Create ...
  • 較之傳統通過App.config和Web.config這兩個XML文件承載的配置系統,.NET Core採用的這個全新的配置模型的最大一個優勢就是針對多種不同配置源的支持。我們可以將記憶體變數、命令行參數、環境變數和物理文件作為原始配置數據的來源,如果採用物理文件作為配置源,我們可以選擇不同的格式(比... ...
  • 今天大家在群里大家非常熱鬧的討論像畫筆一樣慢慢畫出Path的這種效果該如何實現. 北京-LGL 博客號@ligl007發起了這個話題.然後各路高手踴躍發表意見.最後雷叔 上海-雷蒙 博客號@雷蒙之星 以一種巧妙的思路實現了這個效果 使大家受益匪淺 本來這篇博客應該由雷叔來寫的,奈何雷叔忙著寫教材,就 ...
  • 比如:要實現 http://localhost:60291/home/geta/1212.html 或者 .abc 任意擴展名 完成兩步即可。 第一步修改路由: 第二步:修改web.config 增加 <system.webServer>節點 增加如下: <modules runAllManaged ...
  • `dotnet pack` 命令生成項目並創建 NuGet 包。這個操作的結果是兩個 `nupkg` 擴展名的包。一個包含代碼,另一個包含調試符號。 該項目被依賴的 NuGet 包裝被添加到 nuspec 文件,因此,他們能夠在安裝包時得到解決。 ...
  • 1. 按照官方頁面進行安裝 https://www.microsoft.com/net/core#macos 2. 在運行"brew link --force openssl" 時會出錯,這是一個known issue,可以先跳過此步驟,進行下一步,安裝.NET Core SDK 3. 然後參考此頁 ...
  • NSoup是一個開源框架,是JSoup(Java)的.NET移植版本 1、直接用起來 NSoup的強大之處在於可以用類似js的方法來獲取節點元素 通過元素類型獲取元素GetElementByTag("p") 2、做了一個winform的小demo 關鍵代碼: 下麵以提取一個html代碼中211大學名 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...