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

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

 

安裝Redis

我不多在開發機中直接裝各類數據庫,我通常使用Docker,針對Redis也不例外,我仍是使用Docker。github

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

啓動docker,下載redis鏡像:docker pull redisdocker

 

而後運行鏡像併發布端口6379:數據庫

 

而後運行redis-cli(這是Redis的一個命令行管理工具):緩存

 

進入redis-cli以後,咱們能夠設置一個key-value來試試:bash

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

經過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秒若是有兩個變化就作一個快照。

相關文章
相關標籤/搜索