Redis in .NET Core 入門:(1) 安裝和主要功能簡介


Redis(https://redis.io/), 是一個內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。

 

安裝Redis

我很少在開發機中直接裝各種數據庫,我一般使用Docker,針對Redis也不例外,我還是使用Docker。

這是Redis在DockerHub里的地址:https://hub.docker.com/_/redis,里面有文檔。

啟動docker,下載redis鏡像:docker pull redis

 

然后運行鏡像並發布端口6379:

 

然后運行redis-cli(這是Redis的一個命令行管理工具):

 

進入redis-cli之后,我們可以設置一個key-value來試試:

當你輸入的時候,它是有提示的。

通過get key(key為name),可以獲得其對應的值。

 

准備.NET Core項目

建立一個.NET Core 控制台項目,並安裝Redis的.NET Core客戶端。

Redis有很多C#的客戶端,這里有個列表:https://redis.io/clients#c

我這使用的是 StackExchange.Redis (https://stackexchange.github.io/StackExchange.Redis/)。

安裝StackExchange.Redis

 

使用StackExchange.Redis

ConnectionMultiplexer已經實現了IDisposable接口,之所以沒有使用using表達式,是因為該對象應該重復利用的,具體請看文檔。

我之前通過redis-cli設置了key為name的值,這里我通過name這個key把相對應的值找出來,並打印在控制台:

如果所示,連接上了數據庫,並把值輸出到了控制台,OK。

使用C#寫入值

這個也沒什么特別的,看代碼:

 

運行結果:

 

Redis 的數據類型

Redis的主要數據類型有這些:

  • Key:就是key的意思。。。。
  • String:字符串
  • List:有序字符串的集合
  • Hashes:有點像對象,里面可以有若干個字段,字段都有自己的值,字段和值都是字符串類型的。
  • Set:無序唯一字符串的集合
  • Sorted-Set:跟Set很像,但是每一個字符串元素都對應一個浮點數值,該數值叫做分數。它里面的元素通常是按照分數來排序的。

 

Redis 如何持久化

一共有兩種方式:

  • AOF(Append-only file)
  • RDB(Redis database file)

首先需要知道Redis的操作都是在內存中完成的,因為這樣速度快。

AOF

然后你可以啟用AOF,它會把每個操作都記錄到系統文件里。所以如果Redis服務器重啟了,它會根據AOF這個文件來重建整個數據集。

這個文件會很快就變得很大,但是Redis很聰明,它會使用里面最新版本的數據,並壓縮文件到可控大小。

RDB

RDB是Redis的默認模式,它有點像數據庫的快照,創建一些時間點的數據,如果發生災難,你可以從這些數據里進行恢復。

當達到一些條件的時候,例如數據集里面在某段時間內新添加了一定條目的數據,Redis就會把數據做個快照,並寫入一個RDB文件。

 

最佳實踐是兩者都用,使用AOF因為其速度和可用性,使用RDB做災難恢復。

 

Redis的配置文件

https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf 這是Redis 4.0 的一個標准配置文件。

RDB 快照相關

先看快照部分,也就是和RDB有關的部分:

里面的save 900 1.。。。這部分是指,900秒過后,如果至少1個key改變了,那么就做一個快照。

下面的就是300秒過后,如果10個key改變了,那就做一個快照。。。

這些就是進行快照動作的觸發條件。

 

AOF相關

AOF模式默認是不開啟的,也就是no。如果想開啟,那就改成yes即可。

 

使用自定義配置運行Redis容器

RDB & AOF

把上述文件下載到本地,進行修改:

我添加了一個RDB的條件,5秒內1個Key被修改就會觸發快照動作。

 

然后我啟用了AOF:

 

首先把之前的容器刪除吧,然后再建立一個。

這次建立docker容器的時候需要使用volume:

說明一下:

-v這部分是指volume,redis.conf在我電腦里的位置是:D:\Projects\Redis\redis.conf,所以我把該位文件的位置掛載到了容器里的/usr/local/etc/redis/redis.conf這個地方。

然后運行redis這個鏡像,同時運行里面的redis-server,而redis-server的配置文件就是/usr/local/etc/redis/redis.conf。

 

現在這個redis-server運行起來了。

 

再打開一個redis-cli,還是使用容器:

 

然后我設置一個key的值:

這時就達到了RDB的最后一個條件,所以觸發了快照動作。

我就不再實驗了。。。

 

我再打開一下redis容器的bash,然后看一下aof文件是否生成:

可以看到每次操作后aof文件都會更新(里面可以認為就是事務的log)。

 

Master-Slave Replication 主從復制

簡單講一下Redis的主從復制,首先把之前的容器都刪掉。。。

然后我們先建立docker 網絡:

 

然后創建redis master的容器,不過首先修改一下redis.conf里的bind地址,原來是127.0.0.1,改為 bind 0.0.0.0:

這樣的話其它的ip地址也可以連接過來了。

 

然后創建master容器:

注意里面使用了之前創建的橋接網絡。

 

檢查一下redis-net這個網絡:

可以看到該網絡里有一個容器master-redis,其ip為172.20.0.2。

 

然后把redis.conf再復制一份,名字為redis2.conf。

在redis2.conf的Replication部分里,把下面這部分取消注釋,並修改為:

注意這個ip地址和master-redis的ip要一樣。

 

現在我們可以運行這個redis的slave容器了:

 

然后我們可以看到主從復制成功了:

 

打開master的redis-cli:

 

操作一些操作,可以看到master和slave都幾乎同步的做了一些動作,也就是主從復制:

 

設置密碼

把之前的容器都清理掉。。。

主從復制的master通常需要設置密碼,修改redis.conf文件,找到requirepass這部分,取消注釋並設置密碼:

 

在slave的redis2.conf里,找到masterauth這部分,填寫master的密碼:

首先我填寫一個錯誤的密碼。

然后運行兩個容器,看看什么效果:

可以看到提示密碼不正確,無法進行復制。

 

然后刪掉slave容器,再把redis2.conf的密碼修正一下: 

 

然后再運行slave容器:

這次可以看到連接成功了。

 

其它的配置方式

redis-server的命令行參數

如上圖,這就對port和replicaof進行配置,而沒有使用redis2.conf(所以該命令前面的-v部分也是沒有什么作用的)。

 

CONFIG SET

前面我們使用了自定義的配置文件來運行Redis,但是這樣的話需要重啟Redis Server。

而如果使用CONFIG SET(https://redis.io/commands/config-set)的話,那就不需要重啟redis server直接就可以修改配置,但是這樣做不會修改redis.conf等配置文件的。

 

首先需要使用redis-cli,然后進行配置即可,例如:

這就是添加了一個快照的設置:每20秒如果有兩個變化就做一個快照。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM