redis之master.slave主從複製

来源:https://www.cnblogs.com/eternityz/archive/2020/02/07/12273238.html
-Advertisement-
Play Games

簡介 從庫配置 主從同步一 一主多從(同一臺機器上同一個redis運行在三個port上) 1.複製redis配置文件三份 2.啟動三個redis 3.細節(暫時一主一從) redis配置文件中帶有密碼時即requirepass時,如果配置文件不特殊配置(masterauth不配置),此處為常規配置 ...


簡介

主機數據更新後根據配置和策略,自動同步到備機的master/slave機制,master以寫為主,slave以讀為主

從庫配置

配置從庫,不配主庫

配置從庫:
    格式: slaveof 主庫ip 主庫port
    註意: 每次與master斷開之後,都需要重新連接,除非配置到redis.conf文件
    
配置文件細節:
    

主從同步一--一主多從(同一臺機器上同一個redis運行在三個port上)

1.複製redis配置文件三份

[root@izm5e2q95pbpe1hh0kkwoiz redis-5.0.3]# mkdir test-master-slave

[root@izm5e2q95pbpe1hh0kkwoiz redis-5.0.3]# cp redis.conf test-master-slave/redis6379.conf
[root@izm5e2q95pbpe1hh0kkwoiz redis-5.0.3]# cp redis.conf test-master-slave/redis6380.conf
[root@izm5e2q95pbpe1hh0kkwoiz redis-5.0.3]# cp redis.conf test-master-slave/redis6381.conf

修改另外兩份配置文件
    vim redis6379.conf
        daemonize yes
        port 6379
        pidfile /var/run/redis_6379.pid
        logfile "6379.log"
        dbfilename dump6379.rdb
    vim redis6380.conf
        daemonize yes
        port 6380
        pidfile /var/run/redis_6380.pid
        logfile "6380.log"
        dbfilename dump6380.rdb

    vim redis6381.conf
        daemonize yes
        port 6381
        pidfile /var/run/redis_6381.pid
        logfile "6381.log"
        dbfilename dump6381.rdb

2.啟動三個redis

[root@izm5e2q95pbpe1hh0kkwoiz test-master-slave]# cd /alidata/redis-5.0.3/bin
[root@izm5e2q95pbpe1hh0kkwoiz bin]# pwd
/alidata/redis-5.0.3/bin
[root@izm5e2q95pbpe1hh0kkwoiz bin]# ps aux | grep redis
root     20603  0.1  0.1 156392  2284 ?        Ssl   2018 681:54 redis-server *:8686
root     21288  0.0  0.0 112680   984 pts/0    R+   10:58   0:00 grep --color=auto redis
[root@izm5e2q95pbpe1hh0kkwoiz bin]# redis-server ../test-master-slave/redis6380.conf 
[root@izm5e2q95pbpe1hh0kkwoiz bin]# ps aux | grep redis
root     20603  0.1  0.1 156392  2284 ?        Ssl   2018 681:54 redis-server *:8686
root     23628  0.0  0.1 153832  2324 ?        Ssl  10:58   0:00 redis-server 127.0.0.1:6380
root     24492  0.0  0.0 112680   980 pts/0    R+   10:58   0:00 grep --color=auto redis
[root@izm5e2q95pbpe1hh0kkwoiz bin]# redis-server ../test-master-slave/redis6381.conf 
[root@izm5e2q95pbpe1hh0kkwoiz bin]# ps aux | grep redis
root     20603  0.1  0.1 156392  2284 ?        Ssl   2018 681:54 redis-server *:8686
root     23628  0.0  0.1 153832  2324 ?        Ssl  10:58   0:00 redis-server 127.0.0.1:6380
root     27142  0.0  0.1 153832  2304 ?        Ssl  10:58   0:00 redis-server 127.0.0.1:6381
root     28470  0.0  0.0 112680   984 pts/0    R+   10:58   0:00 grep --color=auto redis
[root@izm5e2q95pbpe1hh0kkwoiz bin]# redis-server ../test-master-slave/redis6379.conf 
[root@izm5e2q95pbpe1hh0kkwoiz redis-5.0.3]# ps aux | grep redis
root      4705  0.1  0.1 153832  2592 ?        Ssl  11:11   0:00 redis-server 127.0.0.1:6380
root     20603  0.1  0.1 156392  2296 ?        Ssl   2018 681:55 redis-server *:8686
root     22492  0.0  0.1 153832  2296 ?        Ssl  11:14   0:00 redis-server 127.0.0.1:6379
root     23990  0.0  0.0 112680   980 pts/0    R+   11:14   0:00 grep --color=auto redis
root     27142  0.0  0.1 153832  2304 ?        Ssl  10:58   0:00 redis-server 127.0.0.1:6381

3.細節(暫時一主一從)

# 主機器
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:d9ff48134d9b166cb7f48f4f71a54c9eddc8531c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# 還沒有配置的從機器
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0
master_replid:e06824b502f2bc16c101653a8e36ba954cf35a53
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# 配置從redis
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:df2697f1f530565d1fb683f209283e319faea59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

# 此時master redis狀態
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=28,lag=0
master_replid:df2697f1f530565d1fb683f209283e319faea59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

redis的master跟slave建立主從關係之後,slave redis會從master的redis獲取所有的key

如果master redis down掉,slave redis會繼續等待,master redis運行後,slave redis自動連接

如果slave redis down掉之後,slave redis重新啟動,不會自動連接master redis,需要重新運行slaveof命令

master redis寫入的key,slave redis不能去修改master已經存在的key,在slave中是readonly的

主從同步二--薪火相傳

簡介

上一個slave可以是下一個slave的master,slave同樣可以接受其他slaves的連接和同步請求.
那麼該slave作為鏈條中下一個的master,可以有效減輕master的寫壓力

中途變更轉向:會清除之前的數據,重新建立拷貝最新的.

slaveof 新主庫ip 新主庫port

細節

# 主master
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=28,lag=0
master_replid:df2697f1f530565d1fb683f209283e319faea59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

# master6379的slave6380
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:2142
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=2142,lag=1
master_replid:df2697f1f530565d1fb683f209283e319faea59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2142
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2142

# slave6380的slave6381
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:2128
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:df2697f1f530565d1fb683f209283e319faea59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2128
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2129
repl_backlog_histlen:0

主從複製三--反客為主

簡介

從庫運行slaveof no one ,使當前資料庫停止與其他資料庫的同步,轉成主資料庫
其他的從庫使用"slaveof 新主庫ip 新主庫port",重新綁定最新的主庫

複製原理

slave啟動成功,連接到master後會發送一個sync命令

master接到命令啟動後臺的存檔進程,同時手機所有接收到的用於修改數據命令,

在後臺進程執行完畢之後,master將傳送整個數據文件到slave,以完成一次完全同步

全量複製: 而slave在接收到資料庫文件之後,將其存檔並載入到記憶體中

增量複製: master繼續將新的所有收集到的修改命令依次傳遞給slave,完成同步

但是只要是重新連接master,一次完全同步(全量複製)將被自動執行

哨兵模式(sentinel)

參考鏈接: https://redis.io/topics/sentinel

簡介

反客為主的自動版,能夠後退監控主機是否故障,如果故障了根據投票數自動將從庫轉換為主庫

如何操作

1.調整結構6379帶著6380,6381
2.自定義/alidata/redis-5.0.3/test-master-slave目錄下新建sentinel.conf文件,名字絕對不能錯
3.配置哨兵
    sentinel monitor 被監控資料庫名字(自己定義) 被監控資料庫ip 被監控資料庫port 1
    上面最後一個數字1,表示主機掛掉後slave投票讓誰接替成為主機,得票數多少後成為主機
4.啟動哨兵
    redis-sentinel /alidata/redis-5.0.3/test-master-slave/sentinel.conf
    如果沒有redis-sentinel,則在/alidata/redis-5.0.3/bin目錄下使用如下命令:
    redis-server ../test-master-slave/sentinel.conf --sentinel
    
    [root@izm5e2q95pbpe1hh0kkwoiz bin]# redis-server ../test-master-slave/sentinel.conf --sentinel
    16452:X 10 Jan 2020 15:56:54.511 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    16452:X 10 Jan 2020 15:56:54.511 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=16452, just started
    16452:X 10 Jan 2020 15:56:54.511 # Configuration loaded
                    _._                                                  
               _.-``__ ''-._                                             
          _.-``    `.  `_.  ''-._           Redis 5.0.3 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._                                   
     (    '      ,       .-`  | `,    )     Running in sentinel mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
     |    `-._   `._    /     _.-'    |     PID: 16452
      `-._    `-._  `-./  _.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |           http://redis.io        
      `-._    `-._`-.__.-'_.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |                                  
      `-._    `-._`-.__.-'_.-'    _.-'                                   
          `-._    `-.__.-'    _.-'                                       
              `-._        _.-'                                           
                  `-.__.-'                                               
    
    16452:X 10 Jan 2020 15:56:54.516 # Sentinel ID is a7d6715b13d229862bd5082e1f0e7734897a1693
    16452:X 10 Jan 2020 15:56:54.516 # +monitor master host6379 127.0.0.1 6379 quorum 1
    16452:X 10 Jan 2020 15:56:54.517 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:56:54.520 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379

    
5.原有的master掛掉之後,自動重新選擇master,另外的slave重新掛到新的master下,6379掛掉,投票產生新的master為6381
    16452:X 10 Jan 2020 15:59:43.676 # +odown master host6379 127.0.0.1 6379 #quorum 1/1
    16452:X 10 Jan 2020 15:59:43.676 # +new-epoch 1
    16452:X 10 Jan 2020 15:59:43.676 # +try-failover master host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:43.682 # +vote-for-leader a7d6715b13d229862bd5082e1f0e7734897a1693 1
    16452:X 10 Jan 2020 15:59:43.682 # +elected-leader master host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:43.682 # +failover-state-select-slave master host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:43.745 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:43.745 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:43.809 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:44.588 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:44.588 # +failover-state-reconf-slaves master host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:44.660 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:45.615 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:45.615 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
    16452:X 10 Jan 2020 15:59:45.691 # +failover-end master host6379 127.0.0.1 6379
    ## 切換到投票出來的新的master之6381
    16452:X 10 Jan 2020 15:59:45.691 # +switch-master host6379 127.0.0.1 6379 127.0.0.1 6381
    16452:X 10 Jan 2020 15:59:45.691 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381
    16452:X 10 Jan 2020 15:59:45.691 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6381
    16452:X 10 Jan 2020 16:00:15.768 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6381

    ## 6381變為新的master,6380為slave,只有6380一個slave
    127.0.0.1:6381> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=127.0.0.1,port=6380,state=online,offset=23490630,lag=0
    master_replid:9772fad6a5ca29661aeb5e07ca72c013347c5679
    master_replid2:df2697f1f530565d1fb683f209283e319faea59f
    master_repl_offset:23490630
    second_repl_offset:23480570
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:22442055
    repl_backlog_histlen:1048576
    
    ## 6380是6381的slave
    127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6381
    master_link_status:up
    master_last_io_seconds_ago:1
    master_sync_in_progress:0
    slave_repl_offset:23491043
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:9772fad6a5ca29661aeb5e07ca72c013347c5679
    master_replid2:df2697f1f530565d1fb683f209283e319faea59f
    master_repl_offset:23491043
    second_repl_offset:23480570
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:22442468
    repl_backlog_histlen:1048576


6.最先掛掉的master重新運行之後,自動掛載到重新選舉出來的master下麵,此時最原先的master變為slave
    哨兵檢測到後將6379啟動,將6379變為6381的slave:
        16452:X 10 Jan 2020 16:04:28.076 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6381
    6381下的slave多了6379
        127.0.0.1:6381> info replication
        # Replication
        role:master
        connected_slaves:2
        slave0:ip=127.0.0.1,port=6380,state=online,offset=23501237,lag=2
        slave1:ip=127.0.0.1,port=6379,state=online,offset=23501237,lag=1
        master_replid:9772fad6a5ca29661aeb5e07ca72c013347c5679
        master_replid2:df2697f1f530565d1fb683f209283e319faea59f
        master_repl_offset:23501237
        second_repl_offset:23480570
        repl_backlog_active:1
        repl_backlog_size:1048576
        repl_backlog_first_byte_offset:22452662
        repl_backlog_histlen:1048576
    6379的info replication
        127.0.0.1:6379> info replication
        # Replication
        role:slave
        master_host:127.0.0.1
        master_port:6381
        master_link_status:up
        master_last_io_seconds_ago:1
        master_sync_in_progress:0
        slave_repl_offset:23507614
        slave_priority:100
        slave_read_only:1
        connected_slaves:0
        master_replid:9772fad6a5ca29661aeb5e07ca72c013347c5679
        master_replid2:0000000000000000000000000000000000000000
        master_repl_offset:23507614
        second_repl_offset:-1
        repl_backlog_active:1
        repl_backlog_size:1048576
        repl_backlog_first_byte_offset:23499724
        repl_backlog_histlen:7891

    
7.假如此時投票選舉出來的master又掛掉了,此時是什麼情況?
    哨兵檢測到6381掛掉之後的動作
        16452:X 10 Jan 2020 16:07:53.458 # +sdown master host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.458 # +odown master host6379 127.0.0.1 6381 #quorum 1/1
        16452:X 10 Jan 2020 16:07:53.458 # +new-epoch 2
        16452:X 10 Jan 2020 16:07:53.458 # +try-failover master host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.463 # +vote-for-leader a7d6715b13d229862bd5082e1f0e7734897a1693 2
        16452:X 10 Jan 2020 16:07:53.463 # +elected-leader master host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.463 # +failover-state-select-slave master host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.523 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.523 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.581 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.643 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.643 # +failover-state-reconf-slaves master host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:53.694 * +slave-reconf-sent slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:54.323 * +slave-reconf-inprog slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:55.333 * +slave-reconf-done slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6381
        16452:X 10 Jan 2020 16:07:55.386 # +failover-end master host6379 127.0.0.1 6381
        ## 將master從6381切換為6380
        16452:X 10 Jan 2020 16:07:55.386 # +switch-master host6379 127.0.0.1 6381 127.0.0.1 6380
        16452:X 10 Jan 2020 16:07:55.386 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
        16452:X 10 Jan 2020 16:07:55.386 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380
        16452:X 10 Jan 2020 16:08:25.418 # +sdown slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380
    6380變為master,6379變更為6380的slave:
        127.0.0.1:6380> info replication
        # Replication
        role:master
        connected_slaves:1
        slave0:ip=127.0.0.1,port=6379,state=online,offset=23512243,lag=0
        master_replid:08b69c14d46567b6d0506e84e7c51da49a9661ec
        master_replid2:9772fad6a5ca29661aeb5e07ca72c013347c5679
        master_repl_offset:23512243
        second_repl_offset:23511276
        repl_backlog_active:1
        repl_backlog_size:1048576
        repl_backlog_first_byte_offset:22463668
        repl_backlog_histlen:1048576
    6379變為6380的slave:
        127.0.0.1:6379> info replication
        # Replication
        role:slave
        master_host:127.0.0.1
        master_port:6380
        master_link_status:up
        master_last_io_seconds_ago:1
        master_sync_in_progress:0
        slave_repl_offset:23525130
        slave_priority:100
        slave_read_only:1
        connected_slaves:0
        master_replid:08b69c14d46567b6d0506e84e7c51da49a9661ec
        master_replid2:9772fad6a5ca29661aeb5e07ca72c013347c5679
        master_repl_offset:23525130
        second_repl_offset:23511276
        repl_backlog_active:1
        repl_backlog_size:1048576
        repl_backlog_first_byte_offset:23499724
        repl_backlog_histlen:25407

複製缺點

由於所有的寫操作都是現在master上操作,然後同步更新到slave上,所以master通不到slave機器有一定的延遲,
當系統很繁忙的時候,延遲問題會更加嚴重,slave機器數量的增加也會使這個問題更加嚴重

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

-Advertisement-
Play Games
更多相關文章
  • RabbitMQ安裝步驟(windows) 1、RabbitMQ建立在強大的Erlang OTP平臺上,因此我們首先需要安裝 "Erlang" 。 2、接下來安裝RabbitMQ服務 "rabbitmq server" 。 3、啟動RabbitMQ: (1)右鍵以管理員的方式打開CMD視窗(如果不以 ...
  • 重裝伺服器真是一個耗精力的過程,尤其是用ghost做數據全盤備份,數據ghost恢復蝸牛一般的速度,再加上ghost居然人生第一次碰到了軟體會異常問題,真的是讓人痛苦不堪啊。從現在想來,可能不如用imagex來備份數據,imagex至少可以直接mount,省了我不斷的恢復過程啊。回想起來,選ghos ...
  • 灰度發佈,是指在黑與白之間,能夠平滑過渡的一種發佈方式。通俗來說,即讓產品的迭代能夠按照不同的灰度策略對新版本進行線上環境的測試,灰度發佈可以保證整體系統的穩定,在初始灰度的時候就可以對新版本進行測試、發現和調整問題,以保證其影響度。KubeSphere 基於 "Istio" 提供了藍綠部署、金絲雀 ...
  • MySQL有個utf-8的坑 MySQL 的 utf8 實際上不是真正的 UTF-8。utf8 只支持每個字元最多三個位元組,而真正的 UTF-8 是每個字元最多四個位元組。 ...
  • .NET Framework 4.5.2 框架 資料庫安裝windows7安裝mysql時需要 迅雷下載鏈接: https://download.microsoft.com/download/E/2/1/E21644B5 2DF2 47C2 91BD 63C560427900/NDP452 KB29 ...
  • 網上對於此類的文章已經十分飽和了,那還寫的原因很簡單——作為自己的理解筆記。 前言 ​ 此篇文章作為自己學習 的一些個人理解,使用的引擎是 。首先先講講 事務 的概念,在 中其對 事務 的描述是這樣的: 事務就是一組原子性的SQL查詢,或者說一個獨立的工作單元。如果資料庫引擎能夠成功地對資料庫應用該 ...
  • keys /查看所有的key exists key名字/判斷某個key是否存在 move key db/將可以從當前庫移動到庫db expire key 秒數/為給定的key設置過期時間 ttl key/查看key還有多長時間過期, 1表示永不過期, 2不是已經過期 type key/查看key是什 ...
  • 今天在使用命令slaveof或者是replicaof命令配置redis主從複製時,從機出現master_link_status:down提示,顯示主機是down的狀態,主機顯示沒有從機掛載。 主要是因為這裡的redis配置了密碼,可以在slave的配置文件里指定(配從不配主) 將master和sla ...
一周排行
    -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版本說明 機器同時安裝了 ...