Redis安裝,主從複製、哨兵模式、集群

来源:https://www.cnblogs.com/-xyl/archive/2023/05/22/17411373.html
-Advertisement-
Play Games

**本系列為:MySQL資料庫詳解,為千鋒資深教學老師獨家創作** **致力於為大家講解清晰MySQL資料庫相關知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【關註】持續追更\~** **文末有本文重點總結,技術類問題,也歡迎大家和我們溝通交流!** ![在這裡插入圖片描述](ht ...


淺淺的記錄下Redis安裝、主從、哨兵、集群。搭建筆記

一.Redis下載安裝

系統環境

  •  redis版本:7.0.11
  •  linux版本:CentOS Linux release 8.2.2004 (Core)
  • 官網下載地址:https://redis.io/download/

一些安裝命令,按照步驟執行

cd /usr/local  --redis相關文件將會安裝到此目錄下

mkdir redis7  --創建redis文件目錄

wget  wget https://download.redis.io/redis-stable.tar.gz  --下載最新穩定版本redis,這裡下載版本為7.0.11

tar -zxvf redis-stable.tar.gz --解壓下載好的redis壓縮包

cd redis-stable --進入到安裝包目錄里

make PREFIX=/usr/local/redis7/redis-stable install --使用make命令進行編譯操作

備註:這裡多了一個關鍵字 PREFIX= 這個關鍵字的作用是編譯的時候用於指定程式存放的路徑。比如我們現在就是指定了redis必須存放在/usr/local/redis7目錄。假設不添加該關鍵字Linux會將可執行文件存放在/usr/local/bin目錄,
庫文件會存放在/usr/local/lib目錄。配置文件會存放在/usr/local/etc目錄。其他的資源文件會存放在usr/local/share目錄。這裡指定號目錄也方便後續的卸載,後續直接rm -rf /usr/local/redis7 即可刪除redis。

設置環境變數

sudo cp /usr/local/redis7/redis-stable/bin/redis-cli /usr/local/bin

sudo cp /usr/local/redis7/redis-stable/bin/redis-server /usr/local/bin

sudo cp /usr/local/redis7/redis-stable/bin/redis-sentinel/usr/local/bin

至此下載安裝完畢,啟動redis

redis-server& /usr/local/redis7/redis-stable/redis.conf  --這裡加入& 符號,進行後臺啟動

二.redis.conf文件的一些基本配置

daemonize --表示啟用守護進程,預設是no,開啟時redis將以後臺服務的形式運行。

requirepass --認證密碼

port --監聽埠,預設為6379

database --設置資料庫的db數量

bind --綁定的主機,bind=127.0.0.1只能接受本機的訪問請求,不寫的情況下,無限制接受任何ip地址的訪問

protected-mode  --保護模式:可選項值yes或者no。該模式控制外部網是否可以連接redis服務,預設是yes,所以預設我們外網是無法訪問的,如需外網連接rendis服務則需要將此屬性改為no。

maxclient --設置同一時間最大客戶端連接數,預設無限制,Redis 可以同時打開的客戶端連接數為 Redis 進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis 會關閉新的連接並向客戶端返回 max number of clients reached 錯誤信息。

dir --資料庫rdb文件存放路徑,預設為./ ,即和當前redis.config文件同一目錄下

dbfilename --指定資料庫文件名

刪除預設註釋行後的redis.config 文件

 使用命令 sed -i -e '/#/d;/^$/d' redis.conf

#綁定的主機,bind=127.0.0.1只能接受本機的訪問請求,不寫的情況下,無限制接受任何ip地址的訪問
bind *   

#保護模式:可選項值yes或者no。該模式控制外部網是否可以連接redis服務,預設是yes,所以預設我們外網是無法訪問的,如需外網連接rendis服務則需要將此屬性改為no。
protected-mode yes

#指定 Redis 監聽埠,預設埠為 6379
port 6379  

#設置tcp的backlog,backlog其實是一個連接隊列,backlog隊列總和=未完成三次握手隊列 + 已經完成三次握手隊列。預設為511
tcp-backlog 511

#一個空閑的客戶端維持多少秒關閉。0表示永不關閉
timeout 0

#對訪問客戶端的心跳檢測,每n秒檢測一次,預設為300
tcp-keepalive 300

#表示啟用守護進程,預設是no,開啟yes時redis將以後臺服務的形式運行。
daemonize yes

#當Redis以守護進程方式運行時,Redis預設會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定
pidfile "/var/run/redis_6379.pid"

#日誌等級,Redis總共支持四個級別:debug、verbose、notice、warning,預設為notice
loglevel notice

#日誌名稱,指定日誌文件目錄,預設是logfile"",表示只在標準控制台輸出
logfile ""

#資料庫db數量數量,預設為16
databases 16

#是否顯示logo
always-show-logo no

#預設情況下,Redis 會修改進程標題(如“top”和“ps”所示)以提供一些運行時信息。 可以通過將以下設置為 no 來禁用它並使進程名稱保持為已執行狀態。
set-proc-title yes

#在更改進程標題時,Redis 使用以下模板來構造修改後的標題。
#模板變數在大括弧中指定。 支持以下變數:
#{title} 父進程執行的進程名稱,或子進程的類型。
#{listen-addr} 綁定地址或 ‘*’ 後跟 TCP 或 TLS 埠偵聽,或 Unix 套接字(如果可用)。
#{server-mode} 特殊模式,即“[sentinel]”或“[cluster]”。
#{port} TCP 埠監聽,或 0。
#{tls-port} TLS 埠監聽,或 0。
#{unixsocket} 監聽的 Unix 域套接字,或 “”。
#{config-file} 使用的配置文件的名稱。
proc-title-template "{title} {listen-addr} {server-mode}"
#持久化是出錯了,是否繼續工作
stop-writes-on-bgsave-error yes

#是否壓縮rdb文件
rdbcompression yes

#保存rdb文件時,是否進行錯誤的校驗
rdbchecksum yes

#存的rdb文件名稱
dbfilename "dump.rdb"

#Redis主從全量同步時,通過RDB文件傳輸實現。如果沒有開啟持久化,同步完成後,是否要移除主從同步的RDB文件,預設為no。
rdb-del-sync-files no
#存的rdb文件位置 dir "/usr/local/redis7/redis-stable" #當一個slave失去和master的連接,或者同步正在進行中,slave的行為有兩種可能: #1) 如果 replica-serve-stale-data 設置為 "yes" (預設值),slave會繼續響應客戶端請求,可能是正常數據,也可能是還沒獲得值的空數據 #2) 如果 replica-serve-stale-data 設置為 "no",slave會回覆"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令 replica-serve-stale-data yes #你可以配置salve實例是否接受寫操作。可寫的slave實例可能對存儲臨時數據比較有用(因為寫入salve# 的數據在同master同步之後將很容被刪除),但是如果客戶端由於配置錯誤在寫入時也可能產生一些問題。 #從Redis2.6預設所有的slave為只讀 #註意:只讀的slave不是為了暴露給互聯網上不可信的客戶端而設計的。它只是一個防止實例誤用的保護層 #一個只讀的slave支持所有的管理命令比如config,debug等。為了限制你可以用'rename-command'來隱藏所有的管理和危險命令來增強只讀slave的安全性 replica-read-only yes #同步策略: 磁碟或socket,預設yes磁碟方式 repl-diskless-sync yes #如果非磁碟同步方式開啟,可以配置同步延遲時間,以等待master產生子進程通過socket傳輸RDB數據給slave #預設為5秒,如果配置為0,表示同步無延遲 repl-diskless-sync-delay 5 #非磁碟複製時,可以設置延遲 #當啟用無磁在達到最大延遲之前開始複製期望已連接的副本數。預設值為0表示等待最大延遲 repl-diskless-sync-max-replicas 0 #不使用無磁碟載入 repl-diskless-load disabled #在slave和master同步後(發送psync/sync),後續的同步是否設置成TCP_NODELAY #假如設置成yes,則redis會合併小的TCP包從而節省帶寬,但會增加同步延遲(40ms),造成master與slave數據不一致 #假如設置成no,則redis master會立即發送同步數據,沒有延遲 repl-disable-tcp-nodelay no #主從複製下,優先順序,哨兵模式:主機宕機,從機優先順序數低的優先順序低的,更適合升級為主機,預設為100 replica-priority 100 #acl日誌,用於記錄失敗或者阻塞的命令,定義acl最大表項長度 acllog-max-len 128 #採用UNLINK命令,刪除key時,提供非同步延時釋放,key記憶體的功能 lazyfree-lazy-eviction no #針對設置有TTL的鍵,達到過期後,被redis清理刪除時是否採用lazy free機制 lazyfree-lazy-expire no #針對有些指令在處理已存在的鍵時,會帶有一個隱式的DEL鍵的操作。如rename命令,當目標鍵已存在,redis會先刪除目標鍵,如果這些目標鍵是一個big key,那就會引入阻塞刪除的性能問題。 此參數設置就是解決這類問題,建議可開啟。 lazyfree-lazy-server-del no #針對slave進行全量數據同步,slave在載入master的RDB文件前,會運行flushall來清理自己的數據場景, #參數設置決定是否採用異常flush機制。如果記憶體變動不大,建議可開啟。可減少全量同步耗時,從而減少主庫因輸出緩衝區爆漲引起的記憶體使用增長。 replica-lazy-flush no #修改用戶的del行為操作,像unlink命令一樣 lazyfree-lazy-user-del no #FLUSHDB, FLUSHALL, SCRIPT FLUSH和FUNCTION FLUSH支持非同步和同步,刪除時,delete 將[SYNC|ASYNC]標誌傳遞到相應命令,如果命令都未通過,開啟此命令,用於非同步刪除 lazyfree-lazy-user-flush no #oom-score-adj參數指定Linux內核在記憶體不足時OOM殺死哪些進程,可選值有:yes、no,absolute。 預設值為 no 不更改oom-score-adj的值。 #yes 值是由伺服器啟動時oom-score-agj的初始值定義的,取值範圍為-1000到1000,通常是0。 #absolute 值將oom-score-adj-values參數值寫入到linux內核中,也就是按oom-score-adj-values參數值設定 oom-score-adj no #三個數值分別代表主進程、副本進程、子進程,數值越高代表被殺死的優先順序更高 oom-score-adj-values 0 200 800 #disable-thp參數指定是否禁用透明大頁,預設值為yes,表示禁用透明大頁。 #通常透明大頁預設會被設置為“madvise”或“never”,在這種情況下該參數不會起任何作用。只有當透明大頁設置為“always”時,redis預設會禁用透明大頁,以避免透明大頁帶來的延遲問題。 disable-thp yes #是否開啟aof持久化,如果開啟,在redis啟動時,將載入aof文件 appendonly no #aof持久化後,存儲的文件名稱 appendfilename "appendonly.aof" #aof持久化後,存儲的文件路徑 appenddirname "appendonlydir" #appendfsync參數指定將數據寫入(fsync)到磁碟的方式,取值有以下三種: #no 不同步,讓操作系統在需要時才刷新數據,非常快。 #always 每次寫入AOF日誌後同步,緩慢但是安全。 #everysec 每秒同步一次。 appendfsync everysec #no-appendfsync-on-rewrite參數指定是否在BGSAVE或BGREWRITEAOF階段時調用fsync,預設值為“no”。 #在appendfsync參數設定成“always”或“everysec”,並且後臺保存進程(後臺保存進程和AOF日誌重寫)正在對磁碟執行大量I/O時,redis可能會阻塞很長時間的fsync。 #目前redis是沒有解決此問題的方法的。因此,在遇到延遲問題時,可以將該值設置為“yes”,但這就意味著在最壞的情況下可能會丟失超過30秒的日誌。 no-appendfsync-on-rewrite no #auto-aof-rewrite-percentage參數指定自動重寫AOF文件觸發的百分比,指定百分比為0,則表示禁用自動重寫AOF文件。 #redis能夠在AOF日誌文件增加到指定的百分比時,自動重寫調用BGREWRITEAOF的日誌文件。它的工作原理是這樣:redis會記錄最後一次重寫後AOF文件的大小(如果重啟後沒有發生重寫,則使用啟用時AOF的大小), #此大小與當前的大小比較,如果當前大小大於指定的百分比的話,則觸發重寫。 auto-aof-rewrite-percentage 100 #參數指定觸發重寫AOF文件的最小大小 auto-aof-rewrite-min-size 64mb #aof-load-truncated參數指定redis啟動遇到AOF文件被截斷時是否繼續載入。取值可能為: #yes reids啟動時載入截斷的AOF文件,並會列印日誌通知用戶該事件。 #no redis啟動時因錯誤拒絕啟動,此時就需要用戶手動使用“redis-check-aof”修複AOF文件。 aof-load-truncated yes #參數指定在重寫AOF文件時,是否使用RDB前導碼,以便更快的進行重寫和恢復。啟用後,重寫的AOF文件由兩個不同的部分組成:[RDB 文件] [AOF 尾部]。在載入時,redis會先識別AOF文件以“redis”字元串開頭並載入首碼RDB文件,然後繼續載入AOF尾部。 aof-use-rdb-preamble yes #是否在aof日誌中記錄時間戳 aof-timestamp-enabled no #參數指定命令執行多久會記錄到慢日誌中,以微秒為單位。設置為負數表示禁用慢日誌記錄,設置為0會強制記錄所有命令 slowlog-log-slower-than 10000 #參數指定慢日誌的最大長度,需要註意的是,它會消耗記憶體 slowlog-max-len 128 #參數指定是否開啟延遲監控子系統,預設情況下是禁用的 #通常情況下不需要開啟,只有遇到有延遲問題時,才建議開啟,開啟後會對性能有較小的影響 latency-monitor-threshold 0 notify-keyspace-events "" #指定哈希以記憶體高效的數據結構編碼的最大數量,超過該值就不會再以高效的數據結構進行編碼。 hash-max-listpack-entries 512 #指定以哈希以記憶體高效的數據結構編碼的最大哈希大小,超過該值就不會再以高效的數據結構進行編碼。 hash-max-listpack-value 64 #指定列表以一種特殊的方式編碼,以節省大量空間。該參數可選以下值: #-5 最大大小:64Kb,不推薦用於正常工作負載中 #-4 最大大小:32Kb,不推薦 #-3 最大大小:16Kb,可能不推薦 #-2 最大大小:8Kb,好 #-1 最大大小:4Kb,好 list-max-listpack-size -2 #參數指定列表壓縮的深度,該參數可選以下值: #0 禁用列表壓縮 #1 列表不壓縮頭和尾,壓縮中間部分。例如有這樣一個列表:[head] -> node -> node -> … -> node -> [tail],不會壓縮列表的head和tail,只會壓縮中間node部分。 #2 列表不壓縮頭、下一個、尾和尾的上一個。例如有這樣一個列表:[head] -> [next] -> node -> node -> … ->[prev] -> [tail],不會壓縮head、next、prev和tail,只會壓縮中間node部分。 #3 列表不壓縮頭和尾開始的三個值,例如這樣的列表:[head] -> [next] -> [next] -> node -> node -> … ->[prev] -> [prev] -> [tail] #3 列表不壓縮頭和尾開始的三個值,例如這樣的列表:[head] -> [next] -> [next] -> node -> node -> … ->[prev] -> [prev] -> [tail] list-compress-depth 0 set-max-intset-entries 512 zset-max-listpack-entries 128 zset-max-listpack-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4kb stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes #認證密碼 requirepass "lin789."

三.主從複製

複製redis.conf,分別取名slave_1.conf、slave_2.conf

cp /usr/local/redis7/redis-stable/redis.conf  /usr/local/redis7/redis-stable/slave_1.conf 

cp /usr/local/redis7/redis-stable/redis.conf /usr/local/redis7/redis-stable/slave_2.conf 

修改slave_1.conf文件,除涉及埠外屬性,其他保持一致。最後一步需要加上同步的主機的ip和埠

#監聽埠
port 6378
#redis認證密碼 requirepass "lin789."
#主機認證密碼 masterauth "lin789."
#工作目錄 dir "/usr/local/redis7/redis-stable"
#rdb文件名稱 dbfilename "slave_1.rdb"
#pidfile文件名稱 pidfile "/var/run/redis_6378.pid"

#需要同步的主機ip、埠
replicaof <主機ip> <埠>

修改slave_2.conf文件,操作步驟同上

分別以配置文件redis.conf、slave_1.conf、slave_2.conf 啟動redis服務

cd /usr/local/redis7/redis-stable

redis-server redis.conf

redis-server slave_1.conf

redis-server slave_2.conf

進入到埠為6379的redis服務里

使用命令 redis-cli -p 6379 -a lin789.

使用命令查看集群狀態 info replicaion

四、哨兵模式

備註:這裡哨兵服務只啟用了一個,所以選舉是1

進入到目錄下

cd /usr/local/redis7/redis-stable

編輯sentinel.conf文件

vim sentienl.conf

如下:

protected-mode no
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/usr/local/redis7/redis-stable/sentinel.log"

# 主節點的ip
sentinel announce-ip "127.0.0.1"

# 哨兵的埠
sentinel announce-port 23679

# 哨兵的工作目錄
dir "/usr/local/redis7/redis-stable"

# 哨兵監聽的master資料庫,1表示選舉數,這裡master ip 為主機外網ip地址
sentinel monitor mymaster <master ip> 6379 1

# 配置master的登錄密碼
sentinel auth-pass mymaster lin789.

# 10s內無響應,則認為master掛掉
sentinel down-after-milliseconds mymaster 10000
acllog-max-len 128

#保持預設配置
sentinel deny-scripts-reconfig yes
sentinel resolve-hostnames no
sentinel announce-hostnames no

編輯完畢後保存退出,使用命令 :wq

使用命令開啟哨兵模式 

redis-sentinel sentinel.conf

截止目前開啟 redis 開啟的相關服務

ps -aux|grep redis

根據配置文件的埠號,進入哨兵服務

redis-cli -p 26379   --登錄哨兵

sentinel master mymaster  --哨兵監聽的master信息

sentinel replicas mymaster  --查看master下的slave 信息

五、集群模式

cd /usr/local/redis7 --進入到redis7目錄

mkdir cluster --新建cluster文件夾

cd cluster --進入到cluster 文件下,創建如下6個文件夾,用於存放redis集群配置文件

回到redis7目錄下,創建redis.sh命令文件,用於複製redis.conf、redis-cli 、redis-server 文件到剛纔創建目錄中。內容如下:

for i in {1..6}
do
cp /usr/local/redis7/redis-stable/redis.conf /usr/local/redis7/cluster/redis600$i
cp /usr/local/redis7/redis-stable/bin/redis-cli  /usr/local/redis7/redis-stable/bin/redis-server /usr/local/redis7/cluster/redis600$i
done

修改/usr/local/redis7/cluster/redis6001目錄下 redis.conf 文件,如下

#註釋掉bind項或不修改預設監聽所有網卡
bind 10.0.8.12

#修改,關閉保護模式
protected-mode no

#監聽埠
port 6001


#開啟守護進程,以獨立進程啟動
daemonize yes


#開啟集群模式
cluster-enabled yes

#取消註釋,群集名稱文件設置
cluster-config-file nodes-6001.conf

#群集超時時間設置
cluster-node-timeout 15000

#資料庫名稱
dbfilename "dump6001.rdb"

#工作目錄
dir "/usr/local/redis7/cluster/redis6001"

#訪問密碼
requirepass lin789.

#訪問的主機密碼
masterauth lin789.

#聲明的外網ip,這裡註意是外網地址,否則連接集群時拒絕
cluster-announce-ip 外網ip地址

依次修改6002~6006文件夾下的redis.conf文件配置。(除埠屬性外,其他屬性配置相同)

回到redis7目錄下,創建redis.start命令文件,用於啟動 6001~6006 埠的6個redis服務。內容如下:

for d in {1..6}
do
cd /usr/local/redis7/cluster/redis600$d
redis-server redis.conf
done

回到redis7目錄下, 使用shell命令,啟動redis集群

sh -x redis_start.sh

啟動後服務如下:

使用命令創建集群

redis-cli --cluster create --cluster-replicas 1  127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006  -a lin789. 

備註:這裡127.0.0.1 實際部署時需要換成外網ip,cluster-replicas 1表示主機器最少需要1從,這裡6個redis服務,3主3從

firewall-cmd --add-port=6001/tcp --add-port=6002/tcp  --add-port=6003/tcp --add-port=6004/tcp  --add-port=6005/tcp  --add-port=6006/tcp  --開啟防火牆埠

firewall-cmd --add-port=16001/tcp --add-port=16002/tcp  --add-port=16003/tcp --add-port=16004/tcp  --add-port=16005/tcp  --add-port=16006/tcp  --開啟redis匯流排埠

redis-cli -h 10.0.8.12 -p 6001 -c -a lin789.   --進入到埠為6001服務里

cluster info   --查看集群信息

cluster nodes  --查看集群節點信息

 六、一些問題記錄

1.哨兵模式開啟,後模擬主機服務宕機,主從無法切換問題,報錯:Next failover delay: I will not start a failover before

解決方案兩種情況:a.如果是單機下搭建的主從模式,可以修改從機conf配置文件,replicaof 127.0.0.1 + 主機埠

                                b.開放防火牆埠,以及雲伺服器防火牆埠

2.單機搭建的集群模式下,進入redis後臺模式,操作redis命令沒有問題,外網連接集群時,訪問拒絕或超時

解決方案:創建集群時直接用外網ip:redis-cli --cluster create --cluster-replicas 1  <外網ip>:6001 <外網ip>:6002 <外網ip>:6003 <外網ip>:6004 <外網ip>:6005 <外網ip>:6006  -a lin789. 

                  依次打開redis防火牆匯流排埠號16001(6001+10000)

                  依次修改對應redis節點下的,redis.confg文件中 cluster-announce-ip 屬性為外網ip

七、參考的一些博客鏈接

redis基本安裝和一些配置
https://www.cnblogs.com/AllWjw/p/15771097.html --redis 安裝
https://www.cnblogs.com/AllWjw/p/15771097.html --redis 安裝
https://blog.csdn.net/weixin_45522528/article/details/126636808 --redis.conf一些說明
https://bxbdba.com/archives/redisredisconf%E8%AF%A6%E8%A7%A3 --redis.config 說明
https://blog.csdn.net/weixin_52270081/article/details/120564024 --linux 命令刪除配置行

主從複製
https://blog.csdn.net/weixin_40980639/article/details/125569460 --主從模式

哨兵模式
https://blog.csdn.net/ycx987/article/details/128517285
https://blog.csdn.net/FlyLikeButterfly/article/details/120780277
https://blog.csdn.net/MssGuo/article/details/127163216 --哨兵模式
https://blog.csdn.net/m0_51426055/article/details/129224592 --哨兵模式的啟動與關閉

集群模式
https://www.cnblogs.com/cjsblog/p/9048545.html -- 集群模式
https://www.cnblogs.com/wzh2010/p/15886799.html --集群模式的一些概念原理
https://www.lmlphp.com/user/58834/article/item/815649/
https://blog.csdn.net/m0_59092234/article/details/126596703 --redis集群一些增容和縮容方法,springboot整合redis集群
https://cloud.tencent.com/developer/article/1919678 --哈希槽分配異常

 


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

-Advertisement-
Play Games
更多相關文章
  • 文章代碼分析基於linux-5.19.13,架構基於aarch64(ARM64)。 涉及頁表代碼分析部分: (1)假設頁表映射層級是4,即配置CONFIG_ARM64_PGTABLE_LEVELS=4; (2)虛擬地址寬度是48,即配置CONFIG_ARM64_VA_BITS=48; (3)物理地址 ...
  • ​1、前言 在STM32之前,都是老大頭51,帶著它的“小弟們” MSP430、AVR、PIC在單片機界呼風喚雨。那個時候,市場上遍佈8位機,大學教材用51入門,個人、企業學單片機基本上也都在用51。 雖然AVR也有一些8位機市場,但與stc帶領下的51單片機是完全不能相比的。當然,這個時候也有16 ...
  • # VMware虛擬機聯網詳述 > 網路上東西都是虛擬的,你把握不住 ## 1. 虛擬網路組件 * **虛擬機**(Virtual Machine) 在物理電腦上通過虛擬化技術創建的一臺虛擬電腦。它具有自己的操作系統、應用程式和網路配置,可以獨立運行和管理。 * **虛擬化軟體**(Virtua ...
  • -- 痞子衡維護的NXP-MCUBootUtility工具距離上一個大版本(v4.0.0)發佈過去4個多月了,期間痞子衡也做過兩個小版本更新,但不足以單獨介紹。這一次痞子衡為大家帶來了全新大版本v5.0.0,這次更新主要是想和大家特別聊聊恩智浦新一代 i.MXRT 旗艦 RT1180。 ### 一、 ...
  • 主機操作系統:windows11 虛擬機操作系統:centos7、kali vmware版本:16 (27條消息) 超詳細虛擬機與主機網路連接以及互Ping不通問題的解決_虛擬機無法ping通主機_一隻傻陽陽的博客-CSDN博客 通過此連接中的教程,事實上幾乎沒有進行什麼配置,僅配置了centos7 ...
  • # 概述 Typecho是一款輕量級的開源PHP博客系統,它簡單易用,界面整潔,性能高效,主題、插件眾多。我使用的是騰訊雲輕量伺服器,Typecho的應用模版,一鍵安裝環境。構建自己的博客網站,記錄生活、分享經驗。 ## 購買功能變數名稱、備案、申請SSL 這樣在之後創建完typecho伺服器,就會在ngi ...
  • 本文是線上問題處理案例系列之一,旨在通過真實案例向讀者介紹發現問題、定位問題、解決問題的方法。本文講述了從垃圾回收耗時過長的表象,逐步定位到資料庫連接池保活問題的全過程,並對其中用到的一些知識點進行了總結。 ...
  • 摘要:本文詳細梳理分析了DWS服務面臨軟硬體故障場景和對應的修複原理,希望藉此能夠讓你對DWS的集群故障修複有個全面深入的瞭解。 本文分享自華為雲社區《GaussDB(DWS)故障修複系統性介紹》,作者: 聞鮮生。 DWS是一個分散式架構的MPP集群,物理部署上涉及數百數千台主機和對應的磁碟,以及這 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...