Redis主從復制+Redis哨兵模式+Redis群集模式

  • Redis主從復制+Redis哨兵模式+Redis群集模式
    • 一、Redis主從復制
      • 1、主從復制的作用
      • 2、主從復制過程
      • 3、搭建Redis主從復制
        • 3.1 所有節點服務器安裝redis
        • 3.2 修改Redis配置文件(Master節點操作)
        • 3.3 修改Redis配置文件(Slave節點操作)
        • 3.4 驗證主從效果
    • 二、Redis哨兵模式
      • 1、哨兵模式的作用
      • 2、故障轉移機制(工作原理)
      • 3、主節點的選舉
      • 4、搭建Redis哨兵模式
        • 4.1 修改 Redis 哨兵模式的配置文件(所有節點操作)
        • 4.2 啟動哨兵模式
        • 4.3 查看哨兵信息
        • 4.4 故障模擬
    • 三、Redis群集模式
      • 1、集群的作用
      • 2、Redis集群的數據分片
      • 3、Redis集群的主從復制模型
      • 4、搭建Redis群集模式
        • 4.1創建集群配置目錄及文件
        • 4.2開啟群集功能
        • 4.3啟動redis節點
        • 4.4啟動集群
        • 4.5測試群集
      • 5、cluster集群節點擴容
        • 5.1 在集群中操作

Redis主從復制+Redis哨兵模式+Redis群集模式

●主從復制:主從復制是高可用Redis的基礎,哨兵和集群都是在主從復制基礎上實現高可用的。主從復制主要實現了數據的多機備份,以及對于讀操作的負載均衡和簡單的故障恢復。缺陷:故障恢復無法自動化;寫操作無法負載均衡;存儲能力受到單機的限制。
●哨兵:在主從復制的基礎上,哨兵實現了自動化的故障恢復。缺陷:寫操作無法負載均衡;存儲能力受到單機的限制;哨兵無法對從節點進行自動故障轉移,在讀寫分離場景下,從節點故障會導致讀服務不可用,需要對從節點做額外的監控、切換操作。
●集群:通過集群,Redis解決了寫操作無法負載均衡,以及存儲能力受到單機限制的問題,實現了較為完善的高可用方案。

一、Redis主從復制

主從復制,是指將一臺Redis服務器的數據,復制到其他的Redis服務器。前者稱為主節點(Master),后者稱為從節點(Slave);數據的復制是單向的,只能由主節點到從節點。

默認情況下,每臺Redis服務器都是主節點;且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點。

1、主從復制的作用

●數據冗余:主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。
●故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗余。
●負載均衡:在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis數據時應用連接主節點,讀Redis數據時應用連接從節點),分擔服務器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis服務器的并發量。
●高可用基石:除了上述作用以外,主從復制還是哨兵和集群能夠實施的基礎,因此說主從復制是Redis高可用的基礎。

2、主從復制過程

1.首次同步:當從節點要進行主從復制時,它會發送一個SYNC命令給主節點。主節點收到SYNC命令后,會執行BGSAVE命令來生成RDB快照文件,并在生成期間使用緩沖區記錄所有寫操作。

2.快照傳輸:當主節點完成BGSAVE命令并且快照文件準備好后,將快照文件傳輸給從節點。主節點將快照文件發送給從節點,并且在發送過程中,主節點會繼續將新的寫操作緩沖到內存中。

3.追趕復制:當從節點收到快照文件后,會加載快照文件并應用到自己的數據集中。一旦快照文件被加載,從節點會向主節點發送一個PSYNC命令,以便獲取緩沖區中未發送的寫操作。

4.增量復制:主節點收到PSYNC命令后,會將緩沖區中未發送的寫操作發送給從節點,從節點會執行這些寫操作,保證與主節點的數據一致性。此時,從節點已經追趕上了主節點的狀態。

5.同步:從節點會繼續監聽主節點的命令,并及時執行主節點的寫操作,以保持與主節點的數據同步。主節點會定期將自己的操作發送給從節點,以便從節點保持最新的數據狀態

注意:當slave首次同步或者宕機后恢復時,會全盤加載,以追趕上大部隊,即全量復制

3、搭建Redis主從復制

節點服務器IP地址
Master節點192.168.210.101
Slave1節點192.168.210.102
Slave2節點192.168.210.103
3.1 所有節點服務器安裝redis
//環境準備
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#修改內核參數
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 2048sysctl -p
//安裝redis
yum install -y gcc gcc-c++ maketar zxvf /opt/redis-7.0.13.tar.gz -C /opt/cd /opt/redis-7.0.13
make
make PREFIX=/usr/local/redis install
#由于Redis源碼包中直接提供了 Makefile 文件,所以在解壓完軟件包后,不用先執行 ./configure 進行配置,可直接執行 make 與 make install 命令進行安裝。
#創建redis工作目錄
mkdir /usr/local/redis/{conf,log,data}cp /opt/redis-7.0.13/redis.conf /usr/local/redis/conf/useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/
#環境變量
vim /etc/profile 
export PATH=$PATH:/usr/local/redis/bin			#末尾增加一行source /etc/profile
//定義systemd服務管理腳本
vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
3.2 修改Redis配置文件(Master節點操作)
vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0									#87行,修改監聽地址為0.0.0.0
protected-mode no								#111行,將本機訪問保護模式設置no
port 6379										#138行,Redis默認的監聽6379端口
daemonize yes									#309行,設置為守護進程,后臺啟動
pidfile /usr/local/redis/log/redis_6379.pid		#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log"	#354行,指定日志文件
dir /usr/local/redis/data						#504行,指定持久化文件所在目錄
requirepass abc123								#1037行,可選,設置redis密碼
appendonly yes									#1380行,開啟AOFsystemctl restart redis-server.service

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

3.3 修改Redis配置文件(Slave節點操作)
Slave1
vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0									#87行,修改監聽地址為0.0.0.0
protected-mode no								#111行,將本機訪問保護模式設置no
port 6379										#138行,Redis默認的監聽6379端口
daemonize yes									#309行,設置為守護進程,后臺啟動
pidfile /usr/local/redis/log/redis_6379.pid		#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log"	#354行,指定日志文件
dir /usr/local/redis/data						#504行,指定持久化文件所在目錄
#requirepass abc123								#1037行,可選,設置redis密碼
appendonly yes									#1380行,開啟AOF
replicaof 192.168.210.101 6379					#528行,指定要同步的Master節點IP和端口
#masterauth abc123								#535行,可選,指定Master節點的密碼,僅在Master節點設置了requirepass
Slave2
#遠程傳輸
scp 192.168.210.102:/usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis.confsystemctl restart redis-server.service

在這里插入圖片描述

3.4 驗證主從效果
在Master節點上看日志:
tail -f /usr/local/redis/log/redis_6379.log 

在這里插入圖片描述

在Master節點上新建一個鍵:
redis-cli -h 192.168.210.101 -p 6379 -a abc123
keys *
set myname www
keys *
get myname
#在Slave1節點查看
redis-cli -h 192.168.210.102 -p 6379 -a abc123
keys *
get myname
#在Slave2節點查看
redis-cli -h 192.168.210.103 -p 6379 -a abc123
keys *
get myname

在這里插入圖片描述
在這里插入圖片描述

二、Redis哨兵模式

主從切換技術的方法是:當服務器宕機后,需要手動一臺從機切換為主機,這需要人工干預,不僅費時費力而且還會造成一段時間內服務不可用。為了解決主從復制的缺點,就有了哨兵機制。

哨兵的核心功能:在主從復制的基礎上,哨兵引入了主節點的自動故障轉移。

1、哨兵模式的作用

監控:哨兵會不斷地檢查主節點和從節點是否運作正常。

自動故障轉移:當主節點不能正常工作時,哨兵會開始自動故障轉移操作,它會將失效主節點的其中一個從節點升級為新的主節點,并讓其它從節點改為復制新的主節點。

通知(提醒):哨兵可以將故障轉移的結果發送給客戶端。

哨兵結構由兩部分組成,哨兵節點和數據節點:
哨兵節點:哨兵系統由一個或多個哨兵節點組成,哨兵節點是特殊的redis節點,不存儲數據。
數據節點:主節點和從節點都是數據節點。

2、故障轉移機制(工作原理)

在這里插入圖片描述

1.由哨兵節點定期監控發現主節點是否出現了故障
每個哨兵節點每隔1秒會向主節點、從節點及其它哨兵節點發送一次ping命令做一次心跳檢測。如果主節點在一定時間范圍內不回復或者是回復一個錯誤消息,那么這個哨兵就會認為這個主節點主觀下線了(單方面的)。當超過半數哨兵節點認為該主節點主觀下線了,這樣就客觀下線了。

2.當主節點出現故障,此時哨兵節點會通過Raft算法(選舉算法)實現選舉機制共同選舉出一個哨兵節點為leader,來負責處理主節點的故障轉移和通知。所以整個運行哨兵的集群的數量不得少于3個節點

3.由leader哨兵節點執行故障轉移,過程如下:
●將某一個從節點升級為新的主節點,讓其它從節點指向新的主節點;
●若原主節點恢復也變成從節點,并指向新的主節點;
●通知客戶端主節點已經更換。

需要特別注意的是,客觀下線是主節點才有的概念;如果從節點和哨兵節點發生故障,被哨兵主觀下線后,不會再有后續的客觀下線和故障轉移操作。

3、主節點的選舉

1.過濾掉不健康的(已下線的),沒有回復哨兵 ping 響應的從節點。
2.選擇配置文件中從節點優先級配置最高的。(replica-priority,默認值為100)
3.選擇復制偏移量最大,也就是復制最完整的從節點。

哨兵的啟動依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式

4、搭建Redis哨兵模式

Master節點:192.168.210.101
Slave1節點:192.168.210.102
Slave2節點:192.168.210.103
4.1 修改 Redis 哨兵模式的配置文件(所有節點操作)
cp /opt/redis-7.0.13/sentinel.conf /usr/local/redis/conf/
chown redis.redis /usr/local/redis/conf/sentinel.conf

在這里插入圖片描述

vim /usr/local/redis/conf/sentinel.confprotected-mode no						#6行,關閉保護模式port 26379								#10行,Redis哨兵默認的監聽端口daemonize yes							#15行,指定sentinel為后臺啟動pidfile /usr/local/redis/log/redis-sentinel.pid #20行,指定 PID 文件logfile "/usr/local/redis/log/sentinel.log"	#25行,指定日志存放路徑dir /usr/local/redis/data					#54行,指定數據庫存放路徑sentinel monitor mymaster 192.168.210.101 6379 2		#73行,修改 指定該哨兵節點監控192.168.210.101:6379這個主節點,該主節點的名稱是mymaster,最后的2的含義與主節點的故障判定有關:至少需要2個哨兵節點同意,才能判定主節點故障并進行故障轉移
#sentinel auth-pass mymaster abc123					#76行,可選,指定Master節點的密碼,僅在Master節點設置了requirepasssentinel down-after-milliseconds mymaster 3000		#114行,判定服務器down掉的時間周期,默認30000毫秒(30秒)sentinel failover-timeout mymaster 180000			#214行,同一個sentinel對同一個master兩次failover之間的間隔時間(180秒)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

slave1和slave2
scp 192.168.210.101:/usr/local/redis/conf/sentinel.conf /usr/local/redis/conf/sentinel.conf

在這里插入圖片描述

4.2 啟動哨兵模式
先啟master,再啟slave
cd /usr/local/redis/conf/
redis-sentinel sentinel.conf &
netstat -lntp | grep 6379

在這里插入圖片描述
在這里插入圖片描述

4.3 查看哨兵信息
redis-cli -h 192.168.210.101 -p 26379 
info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.80.10:6379,slaves=2,sentinels=3
4.4 故障模擬
#在主節點添加VIP地址
ifconfig ens33:1 192.168.210.100/24

在這里插入圖片描述

#編寫故障轉移腳本
cd /usr/local/redis/conf/
vim failover.sh
#!/bin/bash
#定義一個新的主節點
NEW_MASTERIP=$6
OLD_MASTERIP="$(ifconfig ens33 | awk 'NR==2{print $2}')"
VIP="192.168.210.200"if [ "$NEW_MASTERIP" = "$OLD_MASTERIP" ];thenifconfig ens33:1 ${VIP}/24exit 0
elseifconfig ens33:1 downexit 0
fiexit 1chmod +x failover.sh
chown redis.redis failover.sh
chown redis.redis sentinel.conf

在這里插入圖片描述

#測試
./failover.sh a b c d e 192.168.210.101
ifconfig
#生成VIP./failover.sh a b c d e 192.168.210.103
ifconfig
#VIP沒了

在這里插入圖片描述
在這里插入圖片描述

vim /usr/local/redis/conf/sentinel.confsentinel client-reconfig-script mymaster /usr/local/redis/conf/failover.sh  #255行,master名稱為mymaster,腳本路徑為/usr/local/redis/conf/failover.sh

在這里插入圖片描述

scp failover.sh sentinel.conf 192.168.210.102:`pwd`
scp failover.sh sentinel.conf 192.168.210.103:`pwd`
#修改兩個從節點的屬主和屬組
cd /usr/local/redis/conf
chown redis. *

在這里插入圖片描述
在這里插入圖片描述

#重新啟動哨兵模式
#查看哨兵模式進程號:
ps aux | grep sentinel
#殺死 Master 節點上redis-sentinel的進程號
killall redis-sentinel			#Master節點上redis-sentinel的進程號
netstat -lntp | grep redis
#啟動哨兵模式
cd /usr/local/redis/conf/
redis-sentinel sentinel.conf &
netstat -lntp | grep redis

在這里插入圖片描述
在這里插入圖片描述

#查看主節點日志文件,主節點在192.168.210.101服務器上
cd /usr/local/redis/log/
tail -f sentinel.log
#故障轉移測試
netstat -lntp | grep redis
kill -9 6035
#把主進程redis-server殺掉,master故障#在slave1查看
ifconfig
#VIP轉移到192.168.210.102服務器

在這里插入圖片描述
在這里插入圖片描述

#通過192.168.210.103服務器查看
redis-cli -h 192.168.210.103 -p 26379
info sentinelredis-cli -h 192.168.210.103 -p 6379 -a abc123
info replication#查看配置文件,發現配置項有所改變,主節點IP地址變成了新的主節點IP地址
vim /usr/local/redis/conf/redis.conf
#重新啟動192.168.210.101服務器
systemctl restart redis-server
systemctl status redis-serverredis-cli -h 192.168.210.101 -p 6379 -a -abc123
info relication
#192.168.210.101變成了從節點vim redis.conf
#自動添加上了主從復制配置

在這里插入圖片描述
在這里插入圖片描述

三、Redis群集模式

集群,即Redis Cluster,是Redis 3.0開始引入的分布式存儲方案。

集群由多組節點(Node)組成,Redis的數據分布在這些節點中。集群中的節點分為主節點和從節點:只有主節點負責讀寫請求和集群信息的維護;從節點只進行主節點數據和狀態信息的復制。

1、集群的作用

(1)數據分區:數據分區(或稱數據分片)是集群最核心的功能。
集群將數據分散到多個節點,一方面突破了Redis單機內存大小的限制,存儲容量大大增加;另一方面每個主節點都可以對外提供讀服務和寫服務,大大提高了集群的響應能力。
Redis單機內存大小受限問題,在介紹持久化和主從復制時都有提及;例如,如果單機內存太大,bgsave和bgrewriteaof的fork操作可能導致主進程阻塞,主從環境下主機切換時可能導致從節點長時間無法提供服務,全量復制階段主節點的復制緩沖區可能溢出。

(2)高可用:集群支持主從復制和主節點的自動故障轉移(與哨兵類似);當任一節點發生故障時,集群仍然可以對外提供服務。

2、Redis集群的數據分片

Redis集群引入了哈希槽的概念
Redis集群有16384個哈希槽(編號0-16383)
集群的每組節點負責一部分哈希槽
每個Key通過CRC16校驗后對16384取余來決定放置哪個哈希槽,通過這個值,去找到對應的插槽所對應的節點,然后直接自動跳轉到這個對應的節點上進行存取操作

#以3個節點組成的集群為例:
節點A包含0到5460號哈希槽
節點B包含5461到10922號哈希槽
節點C包含10923到16383號哈希槽

在這里插入圖片描述

3、Redis集群的主從復制模型

集群中具有A、B、C三個節點,如果節點B失敗了,整個集群就會因缺少5461-10922這個范圍的槽而不可以用。
為每個節點添加一個從節點A1、B1、C1整個集群便有三個Master節點和三個slave節點組成,在節點B失敗后,集群選舉B1位為的主節點繼續服務。當B和B1都失敗后,集群將不可用。

4、搭建Redis群集模式

redis的集群一般需要6個節點,3主3從。方便起見,這里所有節點在同一臺服務器上模擬:
以端口號進行區分:3個主節點端口號:6001/6002/6003,對應的從節點端口號:6004/6005/6006。

方便起見,這里在同一臺服務器上模擬。

服務器主機名IP主端口從端口
Node1節點node192.168.210.10160016004
Node2節點node192.168.210.10160026005
Node3節點node192.168.210.10160036006
4.1創建集群配置目錄及文件
cd /usr/local/redis/![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/f0867c167ab340e5a9cc49dd5f9ea3d7.png)#準備6個子目錄
mkdir -p redis-cluster/redis600{1..6}for i in {6001..6006}
do
cp /opt/redis-7.0.13/redis.conf /usr/local/redis/redis-cluster/redis600$i
done

在這里插入圖片描述

4.2開啟群集功能
#開啟群集功能:
#其他5個文件夾的配置文件以此類推修改,注意6個端口都要不一樣。
cd /usr/local/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1									#87行,注釋掉bind項,默認監聽所有網卡
protected-mode no								#111行,關閉保護模式
port 6001										#138行,修改redis監聽端口
daemonize yes									#309行,設置為守護進程,后臺啟動
pidfile /usr/local/redis/log/redis_6001.pid		#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6001.log"	#354行,指定日志文件
dir ./											#504行,指定持久化文件所在目錄
appendonly yes									#1379行,開啟AOF
cluster-enabled yes								#1576行,取消注釋,開啟群集功能
cluster-config-file nodes-6001.conf				#1584行,取消注釋,群集名稱文件設置
cluster-node-timeout 15000						#1590行,取消注釋群集超時時間設置

在這里插入圖片描述
在這里插入圖片描述

cd /usr/local/redis/redis-cluster
#把redis6001/redis.conf復制到其他5個子配置文件下
for i in {6002..6006}
do
\cp -f redis6001/redis.conf redis$i
done#修改端口號
#使用sed,可以直接替換端口號,不需要用vim
sed -i 's/6001/6002/' ../redis6002/redis.conf
#以6002為例,其余操作相同
4.3啟動redis節點
#啟動redis節點
分別進入那六個文件夾,執行命令:redis-server redis.conf ,來啟動redis節點
cd /usr/local/redis/redis-cluster/redis6001
redis-server redis.conf#從 1 到 6 的范圍循環,將 $d 替換成循環變量的值
#進入對應的目錄并啟動 Redis 服務器
for d in {1..6}
do
cd /usr/local/redis/redis-cluster/redis600$d
./redis-server redis.conf
doneps -ef | grep redis

在這里插入圖片描述

4.4啟動集群
#啟動集群
redis-cli --cluster create 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 --cluster-replicas 1#六個實例分為三組,每組一主一從,前面的做主節點,后面的做從節點。下面交互的時候 需要輸入 yes 才可以創建。
--replicas 1 表示每個主節點有1個從節點。

在這里插入圖片描述
在這里插入圖片描述

4.5測試群集
#測試群集
redis-cli -p 6001 -c					#加-c參數,節點之間就可以互相跳轉
127.0.0.1:6001> cluster slots			#查看節點的哈希槽編號范圍

在這里插入圖片描述

127.0.0.1:6001> set myname zhangsan127.0.0.1:6001> cluster keyslot name					#查看name鍵的槽編號redis-cli -p 6004 -c
127.0.0.1:6004> keys *							#對應的slave節點也有這條數據,但是別的節點沒有

在這里插入圖片描述
在這里插入圖片描述

5、cluster集群節點擴容

cd /usr/local/redis/redis-cluster
mkdir redis6007 redis6008
cp -a redis6006/ redis6007
cp -a redis6006/ redis6008
cd redis6007/
rm -rf appendonlydir/ dump.rdb nodes-6006.conf
sed -i "s/6006/6007/" redis.confcd redis6008/
sed -i "s/6006/6008/" redis.conf
#啟動
for i in {6007,6008}
do
cd /usr/local/redis/redis-cluster/redis$i
./redis-server ./redis.conf
doneps aux | grep redis

在這里插入圖片描述

5.1 在集群中操作
#把6007和6008兩個節點加入到集群中
#先進入到一個節點
redis-cli -p 6001 -c
#查看集群狀態
cluster nodes
#把兩個節點加進去
cluster meet 127.0.0.1 6007
cluster meet 127.0.0.1 6008
#6007和6008都是master狀態,沒有hash槽
cluster nodes
quit

在這里插入圖片描述

#進入到6008
redis-cli -p 6008 -c
cluster nodes
#讓6008跟6007做對接,6008做6007的從
cluster replicate 825f1a79a81f163b4f3467723824bcd6a5d4b80c
cluster nodes
quit
#從6001節點中薅hash槽
redis-cli -p 6007 --cluster reshard 127.0.0.1:6001 
1000
6007的id號
6001id號
done
yes

在這里插入圖片描述

redis-cli -p 6007
cluster nodes

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716391.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716391.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716391.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

8、IBOScms代碼審計

一、sql注入 1、sql注入(Ⅰ) 限制 rreport/api/getlist {"offset":0,"type":"send","keyword":{"subject":"111) AND (updatexml(1,concat(0x7e,(select user()),0x7e),1))-- qw"}}復現 POST /?rreport/api/…

Vue開發實例(十一)用戶列表的實現與操作

用戶列表的實現與操作 一、創建用戶頁面和路由二、表格優化1、表頭自定義2、表格滾動3、加入數據索引4、利用插槽自定義顯示 三、功能1、查詢功能3、增加4、刪除5、修改 一、創建用戶頁面和路由 創建用戶頁面 在 src/components/Main 下創建文件夾user,創建文件Us…

Java ZooKeeper-RocketMQ 面試題

Java ZooKeeper-RocketMQ 面試題 前言1、談談你對ZooKeeper的理解 ?2、Zookeeper的工作原理(Zab協議)3、談談你對分布式鎖的理解,以及分布式鎖的實現?4、 zookeeper 是如何保證事務的順序一致性的?5、 zook…

設計模式之策略模式詳解

目錄 什么是策略模式 應用場景 業務場景實現 抽象類 實現類 Context上下文 測試類 策略模式的優缺點 什么是策略模式 他將定義的算法家族、分別封裝起來,讓他們之間可以相互替換,從而讓算法的變化不會影響到使用算法的用戶。 策略模式使用的就是…

idea出現莫名其妙錯的時候

正常情況idea使用起來都很順手,但是當項目比較多的時候,可能出現莫名奇妙的錯誤,比如導入的包始終報錯java: 程序包com不存在,或者引入自己寫的包也不存在,或者始終出現紅線但是排查之后沒有問題的情況,這種…

進來吧,給自己10分鐘,這篇文章帶你直接學會python

Python的語言特性 Python是一門具有強類型(即變量類型是強制要求的)、動態性、隱式類型(不需要做變量聲明)、大小寫敏感(var和VAR代表了不同的變量)以及面向對象(一切皆為對象)等特點的編程語言。 獲取幫助 你可以很容易的通過Python解釋器獲取幫助。如果你想知道一個對象(o…

OJ:鏈表的中間結點

876. 鏈表的中間結點 - 力扣(LeetCode) 思路 思路:首先最容易想到的思路是什么呢,就是先遍歷一遍鏈表,用一個值count來記錄鏈表的長度,然后我們運用除法,/2,結果是幾,就…

【C++干貨基地】揭秘C++11常用特性:內聯函數 | 范圍for | auto自動識別 | nullptr指針空值

🎬 鴿芷咕:個人主頁 🔥 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想,就是為了理想的生活! 引入 哈嘍各位鐵汁們好啊,我是博主鴿芷咕《C干貨基地》是由我的襄陽家鄉零食基地有感而發,不知道各位的…

平臺工程: 用Backstage構建開發者門戶 - 2

本文介紹了如何使用開源Backstage構建自己的開發者門戶,并基于此實踐平臺工程。本系列共兩篇文章,這是第二篇。原文: Platform Engineering: Building Your Developer Portal with Backstage — Part 2 在本教程第一部分中我們了解了Backstage這個用于構…

外貿網站模板建站

測繪檢測wordpress外貿主題 簡潔實用的wordpress外貿主題,適合做測繪檢測儀器設備的外貿公司使用。 https://www.jianzhanpress.com/?p5337 白馬非馬衣服WordPress外貿建站模板 白馬非馬服裝行業wordpress外貿建站模板,適用于時間服裝企業的官方網站…

Git 如何上傳本地的所有分支

Git 如何上傳本地的所有分支 比如一個本地 git 倉庫里定義了兩個遠程分支,一個名為 origin, 一個名為 web 現在本地有一些分支是 web 遠程倉庫沒有的分支,如何將本地所有分支都推送到 web 這個遠程倉庫上呢 git push web --all

pytorch loss函數整理

變量名解釋 logits:未經過normalize(未經過激活函數處理)的原始分數,例如一個mlp將特征映射到num_target_class維的輸出tensor就是logits。 probs:probabilities的簡寫,logits經過sigmoid函數,…

Doris實戰——銀聯商務實時數倉構建

目錄 前言 一、應用場景 二、OLAP選型 三、實時數倉構建 四、實時數倉體系的建設與實踐 4.1 數倉分層的合理規劃 4.2 分桶分區策略的合理設置 4.3 多源數據遷移方案 4.4 全量與增量數據的同步 4.5 離線數據加工任務遷移 五、金融級數倉穩定性最佳實踐 5.1 多租戶資…

Jenkins的Pipeline概念

文章目錄 Pipeline什么是Jenkins Pipeline聲明式和腳本式Pipeline語法為何使用PipelinePipeline概念PipelineNodeStageStep Pipeline語法概述聲明式Pipeline腳本式Pipeline Pipeline示例 參考 Pipeline 什么是Jenkins Pipeline Jenkins Pipeline是一套插件,它支持…

【Django】model模型—模型繼承

Django中三種繼承風格 抽象基類:僅將父類用于子類公共信息的載體,這樣的父類永遠都不會單獨使用。多表繼承:繼承了一個模型(可能來源其它應用),且想要每個模型都有對應的數據表。代理模型:只想…

JProfiler相關問題及答案(2024)

1、JProfiler是什么及其用途 JProfiler是一款功能豐富的商業Java性能剖析(profiling)工具,它主要面向開發者和性能分析師,用于監測和分析Java應用程序的運行時行為。以下是對JProfiler的一些詳細介紹和它的主要用途: …

webpack的一些知識

核心 webpack 是用來搭建前端工程的它運行在node環境中,它所做的事情,簡單來說,就是打包具體來說,就是以某個模塊作為入口,根據入口分析出所有模塊的依賴關系,然后對各種模塊進行合并、壓縮,形…

洛谷P1157 組合的輸出

深搜板子加一點點修改&#xff0c;適合初學者體會深搜&#xff0c;具體看代碼 題目鏈接 ACcode #include<bits/stdc.h>using namespace std;int a, b;bitset<50>vis;//剪枝 int d[50];void dfs(int x) {if (x b 1) {for (int i 1;i < b;i)cout << se…

HBM(High Bandwidth Memory)

選擇正確的高帶寬內存 構建高性能芯片的選擇越來越多&#xff0c;但附加內存的選擇卻幾乎沒有變化。為了在汽車、消費和超大規模計算中實現最大性能&#xff0c;選擇取決于一種或多種 DRAM&#xff0c;而最大的權衡是成本與速度。 盡管多年來人們一直在努力用更快、更便宜或更…

Linux:kubernetes(k8s)搭建mater節點(kubeadm,kubectl,kubelet)(2)

安裝k8有多種方式如&#xff1a; minikube kubeadm 二進制安裝 命令行工具 我這里就使用kubeadm進行安裝 環境 3臺centos7 master ip &#xff1a;192.168.113.120 2G運存 2內核 node1 ip &#xff1a;192.168.113.121 2G運存 2內核 node2 ip &#xff1a;192.168.1…