主頁 > .NET開發 > 全網最完整的Redis入門指導

全網最完整的Redis入門指導

2020-09-12 21:02:10 .NET開發

前言

本文提供全網最完整的Redis入門指導教程,下面我們從下載Redis安裝包開始,一步一步的學習使用,

下載Redis

官網提供的Redis安裝包是服務于Linux的,而我們需要在Window下使用Redis,所以,我們去下面這個網址中下載,

Redis的下載地址:https://github.com/microsoftarchive/redis/releases

如下圖所示,Redis的windows版是由microsoftarchive提供,是微軟的一個作業小組,所以我們可以選擇完全信任,下面我們選擇最新版的Redis版本下載(可以看到,盡管是最新版本,但最后一次提交已經是2016年了)

下載完成后解壓到檔案夾,得到檔案如下:

重要檔案講解:

redis-server.exe:Redis服務端宿主程式,運行后會啟動一個控制臺表單,該表單是宿主程式,如關閉表單,則Redis服務關閉,

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

redis-check-aof.exe:更新日志檢查程式,

redis-benchmark.exe:性能測驗,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢,

redis-cli.exe: Redis客戶端程式,服務端開啟后,可以通過該客戶端進行命令測驗,(運行后,會啟動一個控制臺表單,可在控制臺內輸入命令)

Windows Service Documentation.docx:Redis服務端使用檔案,

redis.windows-service.conf:Redis啟動服務默認加載的組態檔(下文會介紹如何將Redis服務已Windows服務模式啟動),雙擊redis-server.exe啟動時并不加載該檔案,雙擊exe啟動時會提示未指定組態檔,使用默認配置,這個默認配置應該是exe內部撰寫的,

redis.windows.conf :Redis組態檔,其內容和redis.windows-service.conf是一模一樣的,相當于一個備份,如果希望Redis讀取的組態檔是redis.windows.conf ,則需要對Redis進行命令操作,重新設定組態檔,

了解Redis檔案資訊后,我們運行redis-server.exe,然后我們撰寫一個C#的控制臺專案訪問Redis,

Redis訪問

C#想訪問Redis需要使用開源類別庫,那么應該使用哪個類別庫呢?

打開Redis的中文官網http://www.redis.cn/,在客戶端選單下可以發現C#可用的Redis客戶端很多,如下圖:

這里我們使用ServiceStack.Redis來訪問Redis,

創建專案

首先我們創建一個專案RedisConsole,然后在Nuget下搜索ServiceStack.Redis,如下圖:

然后創建一個RedisManager類來管理Redis,代碼如下:

using ServiceStack.Redis;
using ServiceStack.Text;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
?
namespace RedisConsole
{
    /// <summary>
    /// RedisManager類主要是創建鏈接池管理物件的
    /// </summary>
    public class RedisManager
    {
        /// <summary>
        /// 系結本機Redis
        /// </summary>
        private static string ConnStr = "localhost:6379";//password@ip:port  123@localhost:6379
        private static PooledRedisClientManager _prcm;
?
        
        /// <summary>
        /// 靜態構造方法,初始化鏈接池管理物件
        /// </summary>
        static RedisManager()
        {
            _prcm = CreateManager(new string[] { ConnStr }, new string[] { ConnStr });
        }
        /// <summary>
        /// 創建鏈接池管理物件
        /// </summary> 
        private static PooledRedisClientManager CreateManager(string[] readWriteHosts, string[] readOnlyHosts)
        {
            //WriteServerList:可寫的Redis鏈接地址,
            //ReadServerList:可讀的Redis鏈接地址,
            //MaxWritePoolSize:最大寫鏈接數,
            //MaxReadPoolSize:最大讀鏈接數,
            //AutoStart:自動重啟,
            //LocalCacheTime:本地快取到期時間,單位:秒,
            //RecordeLog:是否記錄日志,該設定僅用于排查redis運行時出現的問題,如redis作業正常,請關閉該項,
            //RedisConfigInfo類是記錄redis連接資訊,此資訊和組態檔中的RedisConfig相呼應
            // 支持讀寫分離,均衡負載 
            return new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
            { 
                MaxWritePoolSize = 5, // “寫”鏈接池鏈接數 
                MaxReadPoolSize = 5, // “讀”鏈接池鏈接數 
                AutoStart = true,
            },
            0,//初始化資料庫 默認有16個資料 這里設定初始化為第0個
            50,//連接池數量
            5//連接池超時秒數
            )
            { 
                ConnectTimeout = 6000,//連接超時時間,毫秒
                SocketSendTimeout = 6000,//資料發送超時時間,毫秒
                SocketReceiveTimeout = 6000,// 資料接收超時時間,毫秒
                IdleTimeOutSecs = 60,//連接最大的空閑時間 默認是240
                PoolTimeout = 6000 //連接池取鏈接的超時時間,毫秒
            };
        }
?
        /// <summary>
        /// 客戶端快取操作物件
        /// </summary>
        public static IRedisClient GetClient()
        {
            if (_prcm == null)
            {
                _prcm = CreateManager(new string[] { RedisPath }, new string[] { RedisPath });
            }
            return _prcm.GetClient();
        }
    }
 }

然后在Main函式里使用RedisManager來進行寫入和讀取,代碼如下:

static void Main(string[] args)
        { 
            var redisClient = RedisManager.GetClient(); 
            redisClient.Set<string>("Name", "Kiba518");
            redisClient.Set<int>("Age", 10000);  
            Console.WriteLine($"MyName:{redisClient.Get<string>("Name")}====MyAge:{redisClient.Get<int>("Age")}");
            redisClient.Dispose();  //釋放記憶體
            Console.ReadLine();
        }

運行結果如下圖所示:

可以看到,我們成功的完成了Redis的插入和讀取,

但我們不滿足于此,我們需要一個圖形管理界面更直觀的查看Redis資料庫,

下載RedisStudio,

下載地址:https://github.com/cinience/RedisStudio/releases

運行RedisStudio,連接本地Redis,如下圖:

連接成功后,點擊Data選單,查看資料,

可以看到,我們添加的資料被寫進了第0個資料庫(Redis默認會創建16個資料庫,資料庫編號以0開頭),

Redis的Windows服務

使用Cmd的命令視窗作為Redis的宿主行程確實有一些問題,比如關閉了就不能用了,比如不能開機自啟,為了讓Redis服務可以更好的運行,我們需要把Redis的宿主改成Windows是服務,

這件事不需要我們自行開發,redis-server.exe中已經提供了這些功能,它的Main函式會處理一些他接受的引數,

現在我們使用命令列啟動redis-server.exe,

注:使用Redis命令時,需要在先將目錄跳轉到Redis所在檔案夾,如【cd/d D:\Redis-x64-3.2.100】

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

引數介紹:

service-install:啟動Redis服務安裝,必須是第一個引數,

redis.windows.conf:指定組態檔,

loglevel verbose:日志級別,

CMD運行結果如下圖所示:

查看服務,

如上圖所示,服務已經成功的安裝到系統中了,右鍵就可以啟動服務了,

當然我們也可以通過命令列啟動和關閉服務,命令如下:

啟動服務命令:redis-server.exe --service-start

關閉服務命令:redis-server.exe --service-stop

洗掉服務命令:redis-server.exe --service-uninstall 

CMD運行關閉服務結果如下圖:

注意:redis.windows.conf檔案默認配置的IP需要修改成本機的IP,window服務才能正常啟動,

配置密碼

我們都知道資料庫是需要密碼的,這樣才能保證安全性,不然任何一個知道你服務器IP的人只要按個埠試一遍就可以連接你的資料庫了,

Redis的資料庫密碼需要在組態檔中設定,默認是沒有密碼的,

因為上文我們配置Windows服務時,指定了redis.windows.conf檔案為組態檔,所以我們現在需要在redis.windows.conf檔案中配置密碼,

打開redis.windows.conf檔案,搜索【# requirepass foobared】定位到配置密碼的行(組態檔中#為注釋符),然后在該行下方輸入requirepass 123456,其中123456就是資料庫的密碼了,如下圖所示:

現在我們測驗一下,運行我們剛才的專案,結果如下圖所示:

可以看到,系統提示了驗證錯誤的例外,

這是因為我們上文配置的連接字串是【localhost:6379】這里面只有IP和埠,現在因為有了密碼所以這個字串不在合法了,

現在我們將密碼加入進字串,修改代碼如下:

private static string ConnStr = "123456@localhost:6379";

專案成功運行,訪問Redis資料庫成功,如下圖:

----------------------------------------------------------------------------------------------------

代碼已經傳到Github上了,歡迎大家下載,

Github地址:https://github.com/kiba518/RedisConsole

----------------------------------------------------------------------------------------------------

注:此文章為原創,任何形式的轉載都請聯系作者獲得授權并注明出處!
若您覺得這篇文章還不錯,請點擊下方的推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/13085327.html

 

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/17055.html

標籤:C#

上一篇:foreach 集合又拋經典例外了,這次一定要刨根問底

下一篇:c#泛型是什么

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more