Linux離線安裝redis集群

来源:https://www.cnblogs.com/tigerchen666/archive/2018/11/07/9922473.html
-Advertisement-
Play Games

一、應用場景介紹 本文主要是介紹Redis集群在Linux環境下的安裝講解,聯網環境安裝較為簡單,這裡只說離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態。 二、安裝環境及工具 系統:CentOS7 工具:XShell5及Xftp5 安裝包 ...


一、應用場景介紹

  本文主要是介紹Redis集群在Linux環境下的安裝講解,聯網環境安裝較為簡單,這裡只說離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態。

 

二、安裝環境及工具

  系統:CentOS7

 

  工具:XShell5及Xftp5

 

  安裝包:

      Ruby-2.4.2

 

      Rubygems-2.6.14

 

      Redis-4.0.2(3.x版本才開始支持集群功能)

 

openssl-1.1.0f

三、安裝步驟

要搭建一個最簡單的Redis集群,我們至少需要6個節點:3個Master和3個Slave。那為什麼需要3個Master呢?其實就是一個“鐵三角”的關係,當1個Master下線的時候,其他2個Master和對應的Salve立馬就能頂替上去,確保集群能夠正常使用,如果你之前瞭解Mongodb/Hadoop/Strom這些的話,你就很容易目標一般分散式的最低要求基數個數節點,這樣便於選舉(少數服從多數的原則)。本文當中,我們就偷下懶,在一臺Linux虛擬機上搭建6個節點的Redis集群(實際真正生產環境,需要3台Linux伺服器分佈存放3個Master)

實際上,Redis集群的操作在後文你可以看到是通過Ruby腳本來完成的,因此我們需要安裝Ruby相關的RPM包,以及Redis和Ruby的介面包。

 

1、Ruby離線安裝

一、Ruby簡介

  Ruby是一種純粹的面向對象編程語言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)創建於1993年。

 

  您可以在 www.ruby-lang.org 的 Ruby 郵件列表上找到松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)的名字。在 Ruby 社區,松本也被稱為馬茨(Matz)。Ruby 是"程式員的最佳朋友"。

Ruby 的特性與 Smalltalk、Perl 和 Python 類似。Perl、Python 和 Smalltalk 是腳本語言。Smalltalk 是一個真正的面向對象語言。Ruby,與 Smalltalk 一樣,是一個完美的面向對象語言。使用 Ruby 的語法比使用 Smalltalk 的語法要容易得多。

二、Ruby離線安裝

去官網下載:http://www.ruby-lang.org/en/downloads/  最新的版本為2.4.2

在安裝之前,請確保你Root許可權,將下載的Ruby安裝包上傳到伺服器當中,使用Xftp可以很方便的將文件傳入到linux伺服器上。

 

使用命令# tar -zxvf ruby-2.4.2.tar.gz解壓當前文件包,使用# cd ruby-2.4.2轉到當前目錄,

使用命令# ./configure --prefix=/usr/local/ruby  --prefix是將ruby安裝到指定目錄,也可以自定義。出現如下界面代表已經配置完成了。

 

 

 

然後使用# make  &&  make install 打包編譯,時間較長,稍等片刻,打包完成後輸入 #ruby –v如果出現ruby的版本號則代表安裝成功。如果出現如下的情況,則先跳過執行第三步。

 

三、配置Ruby環境變數

使用命令# which ruby

 

 

如果出現上圖所示則代表沒有配置環境變數。輸入命令# vim /etc/profile,然後按下I鍵進入編輯模式,在文件最後加上 export PATH=/usr/local/ruby/bin:$PATH

 

 

如果已存在PATH則在最後加入 :/usr/local/ruby/bin 。

 

 

 

保存退出就可以了(按ESC鍵,然後輸入:wq保存退出) 最後需要執行命令# source /etc/profile 才能立即生效,此時再使用# which ruby則會出現對應的信息。安裝成功!

 

 

 

2、離線安裝RubyGems

一、RubyGems簡介

RubyGems 是 Ruby 的一個包管理器,它提供一個分發 Ruby 程式和庫的標準格式,還提供一個管理程式包安裝的工具。

 

RubyGems 旨在方便地管理 gem 安裝的工具,以及用於分發 gem 的伺服器。這類似於 Ubuntu 下的apt-get, Centos 的 yum,Python 的 pip。

RubyGems大約創建於2003年11月,從Ruby 1.9版起成為Ruby標準庫的一部分。

 

二、RubyGems離線安裝

首先下載安裝包:https://rubygems.org/pages/download。使用Xftp將對應壓縮包放入到/usr/local/src

解壓# tar -zxvf rubygems-2.6.14.tgz

進入對應目錄# cd rubygems-2.6.14

然後使用命令# ruby setup.rb 當出現Rubygems-2.6.14 installed時,表示已經成功安裝,

使用命令# gem update –system更新 RubyGems。

三、RubyGems環境變數配置

使用命令# which gem 查看環境變數是否存在。

 

 

如不存在則需配置環境變數,存在則不需要配置。

輸入命令# vim /etc/profile  如上面所說的配置Ruby的環境變數的操作一樣,將路徑寫入PATH中,保存即可。最後需要執行命令:source /etc/profile 才能立即生效。

 

3、安裝Redis

一、Redis簡介

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在記憶體中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

Redis 是一個高性能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

Redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。存檔可以有意無意的對數據進行寫操作。由於完全實現了發佈/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發佈記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。

redis的官網地址,非常好記,是redis.io。(特意查了一下,功能變數名稱尾碼io屬於國家功能變數名稱,是british Indian Ocean territory,即英屬印度洋領地)

目前,Vmware在資助著redis項目的開發和維護。

 

二、Redis離線安裝

1、到官網(https://redis.io/download)下載Redis,現在最新的版本為:4.0.2 ,將下載好的壓縮包使用Xftp上傳到伺服器當中。

如圖所示,我是新建了一個Redis臨時目錄存放,偷懶我就用xftp5手動創建一個目錄存放(也可以寫命令創建文件夾 $ makdir redis)

 

使用#cd /usr/local/src/redis命令轉到壓縮包所在路徑,使用解壓命令# tar -zxvf redis-4.0.2.tar.gz。

進入解壓後的redis的目錄,

 

使用make命令進行安裝 #make && make install  //make 這裡如果不指定PREFIX,預設將安裝在/usr/local/bin下,保持預設就好。出現如下界面表示已經安裝成功了。

 

 

安裝完成後 在redis的解壓目錄中使用命令# redis-server redis.conf 即可啟動redis,因為我們需要配置集群版本的redis ,這裡我們先使用Ctrl + C 退出redis。

 

 

三、配置Redis集群

剛剛上面講到如果只是想運行單機版的Redis(個人研究Redis可以安裝單機版),上面的講解已經夠了,不過現實當中,我們往往是需要使用到集群功能的,進行容錯。

之前講到是我們需要6個節點的Redis作為集群,所以我們需要創建6個文件夾,分別存放6個節點的配置信息,6個節點需要對應6個埠號,比如7001~7006,這個埠號我們自行定義,我們通過xftp5可視化創建一下。也可以通過命令創建更加快捷,使用命令# mkdir redis700{1,2,3,4,5,6} 即可在當前目錄批量創建6個文件夾。

 

 

因為需要6個節點,所有我們需要配置各自的redis.conf配置文件。到我們Redis的安裝目錄usr/local/bin,將redis-cli、redis-server、redis.conf(沒有conf文件,可以從壓縮包里拷個出來,或者自己直接新建一個空的conf文件,後面再配置相關信息),分別複製到剛剛創建的6個文件夾當中。可以使用Xftp進行複製。

 

也可以使用命令 # echo /usr/local/src/redis/redis700{1,2,3,4,5,6} | xargs -n 1 cp redis-cli redis-server 將server和client複製到對應的6個文件夾中, 然後再使用命令 # echo         /usr/local/src/redis/redis700{1,2,3,4,5,6} | xargs -n 1 cp ../src/redis/redis-4.0.2/redis.conf 。

將conf文件複製到這6個文件夾中。

 

 

接下來,我們需要配置redis.conf文件,如果你是從壓縮包拷貝出來,你會發現特別多的備註,這些是都是官網的備註講解,你可以全部刪除,只配置你想配置的信息就行。我們主要配置相對應的埠信息和集群配置信息。

主要配置信息如下:

port 7001

#啟用守護進程

appendonly yes 

#啟用集群

cluster-enabled yes 

#關聯集群的配置文件

cluster-config-file "nodes.conf"

#超時時間

cluster-node-timeout 5000

#只要有結點宕機導致16384個槽沒全被覆蓋,整個集群就全部停止服務,所以一定要改為no

cluster-require-full-coverage no

#後臺啟動

daemonize yes

 logfile ""

bind 0.0.0.0

 

註意6個文件夾的埠號需要一一對應,6個文件都修改完成後,在每個對應文件夾中使用命令# redis-server redis.conf分別將這6個redis服務啟動起來。也可以使用腳本的形式批量進行操作。

這裡我們可以新建一個腳本用於批量執行啟動任務,在redis目錄下使用命令# vim startall.sh 。輸入I進入編輯模式,輸入如下命令:

 

 

按下Esc然後:wq保存,執行./startall.sh 提示permission denied說明許可權不足,執行命令# chmod 777 startall.sh修改許可權獲取root用戶執行腳本。在使用命令# sh startall.sh 即可正常執行腳本,腳本執行情況如下:

 

 

通過命令netstat -tnulp | grep redis和ps  aux | grep redis查看redis運行情況,可以看到埠7001、7002、7003、7004、7005、7006的redis都起來了。

 

 

 

 

 

四、安裝redis與ruby的介面包

現在還缺少redis和ruby的介面,使用gem 安裝,我們這個時候其實還需要安裝對應的Redis的Rbuy介面包。我們需要下載對應Redis的gem包安裝才行。Rubygems的官網其實提供了Redis的gem包,我們可以直接去下載https://rubygems.org/gems/redis/   下載後上傳到伺服器當中

因為需要zlib工具依賴,我們需要再安裝zlib才行,下載zlib,上傳解壓,安裝zlib官方網站:http://www.zlib.net ,最新版1.2.11,安裝我們就一筆帶過。

到Xftp上傳後的目錄

命令:# tar -xvzf zlib-1.2.11.tar.gz 進入解壓後的目錄#cd zlib-1.2.11

配置編譯安裝:

命令# ./configure --prefix=/usr/local/zlib

命令:# make && make install

完成後我們需要進入ruby解壓後的目錄,再使用命令 # cd ./ext/zlib進入ruby的zlib目錄,再使用命令# ruby extconf.rb  --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib   //會生成一個Makefile文件。這個時候不要直接安裝,先需要將Makefile文件中的錯誤路徑修改一下。使用命令# vim Makefile 打開該文件,將文件中的

 

 

修改完成,然後保存:wq接著我們再 使用命令# make && make install ,

安裝完成。

 

 

 

最新版本介面包為redis-4.0.1.gem,使用Xftp上傳至伺服器後使用命令# gem install redis-4.0.1.gem ,

如出現如下錯誤:

 

 

則先跳過該部分,先安裝OpenSSL。

 

安裝OpenSSL

因為Redis集群交互是需要OpenSSL ,所以需要先安裝OpenSSL,官網地址:https://www.openssl.org/source/ 上次壓縮包到伺服器,解壓。如果之前已經安裝了則跳過該步驟。

命令# tar -xzvf openssl-1.1.0f.tar.gz

# cd openssl-1.1.0f

# ./config -fPIC --prefix=/usr/local/openssl enable-shared

# ./config -t

# make && make install

安裝完成。

 

安裝完成後回到Ruby的解壓目錄進入# cd /usr/local/src/ruby-2.4.2/ext/openssl/目錄,像安裝zlib一樣安裝openssl。

命令 # ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/

--with-openssl-lib=/usr/local/openssl/lib  //會生成一個Makefile文件

註意:/usr/local/openssl是我的openssl安裝目錄

 

同樣需要將Makefile中的$(top_srcdir)全部改成../.. (可以在Xftp中對該文件使用Notepad++進行打開,然後統一替換)

修改後保存,再執行# make && make install 這樣就可以成功了。

 

 

這時候再回到存放redis-4.0.1.gem的目錄,執行命令# gem install redis-4.0.1.gem  此時redis集群的配置就完成了。

 

 

 

五、啟動Redis集群

我們使用redis的集群是通過Ruby腳本完成的,在redis的解壓包下的src目錄下找到文件 redis-trib.rb

 

 

使用Xftp或者複製命令# cp redis-trib.rb ../../將文件放到放有6個節點的文件夾的同一級 ,使用命令# ./redis-trib.rb  create --replicas  1  127.0.0.1:7001  127.0.0.1:7002  127.0.0.1:7003  127.0.0.1:7004  127.0.0.1:7005  127.0.0.1:7006 我們可以使用其預設配置

我們選擇yes,意思是服從這種主從分配方式,我們也可以通過配置文件自己指定slave。

到此可以看到redis集群已經啟動成功了。

 

 

六、Redis集群測試

進入7001埠的目錄,使用命令 # redis-cli -p 7001 –c 

 說明:-h+host –p+埠號 –c 是要連接集群,註意坑,不加會報錯

 

 

我們在7001的redis中存入一個值 set name tiger ,

 

 

這時我們發現他自動把個值轉存到7002的redis了。

然後使用 Ctrl + C退出客戶端,進入7003的目錄使用命令  # redis-cli -p 7003 –c 鏈接7003的redis,獲取值name,我們會發現redis會自動跳轉到存入該key的集群redis節點7002中。

 

 

 

 

七、redis-trib.rb腳本的使用

 

redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源碼src目錄下,是基於redis提供的集群命令封裝成簡單、便捷、實用的操作工具。redis-trib.rb是redis作者用ruby完成的。ruby是門非常靈活的語言,redis-trib.rb只用了1600行左右的代碼,就實現了強大的集群操作。

我們可以使用命令# ruby redis-trib.rb help 對redis-trib.rb進行瞭解

 

 

 

 

可以看到redis-trib.rb具有以下功能:

1、create:創建集群

2、check:檢查集群

3、info:查看集群信息

4、fix:修複集群

5、reshard:線上遷移slot

6、rebalance:平衡集群節點slot數量

7、add-node:將新節點加入集群

8、del-node:從集群中刪除節點

9、set-timeout:設置集群節點間心跳連接的超時時間

10、call:在集群全部節點上執行命令

11、import:將外部redis數據導入集群

 

1、create創建集群

create命令可選replicas參數,replicas表示需要有幾個slave。最簡單命令使用如下:

# ruby redis-trib.rb create 127.0.0.1:7001  127.0.0.1:7002  127.0.0.1:7003

有一個slave的創建命令如下:

# ruby redis-trib.rb create --replicas 1 127.0.0.1:7001  127.0.0.1:7002  127.0.0.1:7003 

127.0.0.1:7004  127.0.0.1:7005  127.0.0.1:7006

 

2、check檢查集群

檢查集群狀態的命令,沒有其他參數,只需要選擇一個集群中的一個節點即可。執行命令以及結果如下:

# ruby redis-trib.rb check 127.0.0.1:7001

3、info查看集群信息

info命令用來查看集群的信息。info命令也是先執行load_cluster_info_from_node獲取完整的集群信息。然後顯示ClusterNode的info_string結果,示例如下:

# ruby redis-trib.rb info 127.0.0.1:7001

 

4、fix修複集群

fix命令的流程跟check的流程很像,顯示載入集群信息,然後在check_cluster方法內傳入fix為true的變數,會在集群檢查出現異常的時候執行修複流程。目前fix命令能修複兩種異常,一種是集群有處於遷移中的slot的節點,一種是slot未完全分配的異常。

fix_open_slot方法是修複集群有處於遷移中的slot的節點異常。fix_slots_coverage方法能修複slot未完全分配的異常。

命令:# ruby redis-trib.rb fix 127.0.0.1:7001

 

5、reshard線上遷移slot

reshard命令可以線上把集群的一些slot從集群原來slot負責節點遷移到新的節點,利用reshard可以完成集群的線上橫向擴容和縮容。

reshard的參數很多,下麵來一一解釋一番:

reshard          host:port

                --from <arg>

                --to <arg>

                --slots <arg>

                --yes

                --timeout <arg>

                --pipeline <arg>

host:port:這個是必傳參數,用來從一個節點獲取整個集群信息,相當於獲取集群信息的入口。

--from <arg>:需要從哪些源節點上遷移slot,可從多個源節點完成遷移,以逗號隔開,傳遞的是節點的node id,還可以直接傳遞--from all,這樣源節點就是集群的所有節點,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。

--to <arg>:slot需要遷移的目的節點的node id,目的節點只能填寫一個,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。

--slots <arg>:需要遷移的slot數量,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。

--yes:設置該參數,可以在列印執行reshard計劃的時候,提示用戶輸入yes確認後再執行reshard。

--timeout <arg>:設置migrate命令的超時時間。

--pipeline <arg>:定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用預設值為10。

命令:# ruby redis-trib.rb reshard --from all --to

80b661ecca260c89e3d8ea9b98f77edaeef43dcd  --slots 11 127.0.0.1:7001

 

6、rebalance平衡集群節點slot數量

rebalance命令可以根據用戶傳入的參數平衡集群節點的slot數量,rebalance功能非常強大,可以傳入的參數很多,以下是rebalance的參數列表和命令示例。

rebalance       host:port

                --weight <arg>

                --auto-weights

                --threshold <arg>

                --use-empty-masters

                --timeout <arg>

                --simulate

                --pipeline <arg>

命令# ruby redis-trib.rb rebalance --threshold 1 --weight b31e3a2e=5 --weight 60b8e3a1=5 --use-empty-masters  --simulate 127.0.0.1:7001

下麵也先一一解釋下每個參數的用法:

 

host:port:這個是必傳參數,用來從一個節點獲取整個集群信息,相當於獲取集群信息的入口。

--weight <arg>:節點的權重,格式為node_id=weight,如果需要為多個節點分配權重的話,需要添加多個--weight <arg>參數,即--weight b31e3a2e=5 --weight 60b8e3a1=5,node_id可為節點名稱的首碼,只要保證首碼位數能唯一區分該節點即可。沒有傳遞–weight的節點的權重預設為1。

--auto-weights:這個參數在rebalance流程中並未用到。

--threshold <arg>:只有節點需要遷移的slot閾值超過threshold,才會執行rebalance操作。

--use-empty-masters:rebalance是否考慮沒有節點的master,預設沒有分配slot節點的master是不參與rebalance的,設置--use-empty-masters可以讓沒有分配slot的節點參與rebalance。

--timeout <arg>:設置migrate命令的超時時間。

--simulate:設置該參數,可以模擬rebalance操作,提示用戶會遷移哪些slots,而不會真正執行遷移操作。

--pipeline <arg>:與reshar的pipeline參數一樣,定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用預設值為10。

 

7、add-node將新節點加入集群

add-node命令可以將新節點加入集群,節點可以為master,也可以為某個master節點的slave。

add-node    new_host:new_port existing_host:existing_port

          --slave

          --master-id <arg>

add-node有兩個可選參數:

--slave:設置該參數,則新節點以slave的角色加入集群

--master-id:這個參數需要設置了--slave才能生效,--master-id用來指定新節點的master節點。如果不設置該參數,則會隨機為節點選擇master節點。

可以看下add-node命令的執行示例:

命令#ruby redis-trib.rb add-node 127.0.0.1:7009  127.0.0.1:7001

 

 

8、del-node從集群中刪除節點

del-node可以把某個節點從集群中刪除。del-node只能刪除沒有分配slot的節點。刪除命令傳遞兩個參數:

host:port:從該節點獲取集群信息。

node_id:需要刪除的節點id。

del-node執行結果示例如下:

命令# ruby redis-trib.rb del-node 127.0.0.1:7001

d5f6d1d17426bd564a6e309f32d0f5b96962fe53

 

 

9、set-timeout設置集群節點間心跳連接的超時時間

set-timeout用來設置集群節點間心跳連接的超時時間,單位是毫秒,不得小於100毫秒,因為100毫秒對於心跳時間來說太短了。該命令修改是節點配置參數cluster-node-timeout,預設是15000毫秒。通過該命令,可以給每個節點設置超時時間,設置的方式使用config set命令動態設置,然後執行config rewrite命令將配置持久化保存到硬碟。以下是示例:

命令# ruby redis-trib.rb set-timeout 127.0.0.1:7001  30000

 

10、call在集群全部節點上執行命令

call命令可以用來在集群的全部節點執行相同的命令。call命令也是需要通過集群的一個節點地址,連上整個集群,然後在集群的每個節點執行該命令。

命令# ruby redis-trib.rb call 127.0.0.1:7001 get key

 

 

11、import將外部redis數據導入集群

import命令可以把外部的redis節點數據導入集群。導入的流程如下:

1、通過load_cluster_info_from_node方法轉載集群信息,check_cluster方法檢查集群是否健康。

2、連接外部redis節點,如果外部節點開啟了cluster_enabled,則提示錯誤。

3、通過scan命令遍歷外部節點,一次獲取1000條數據。

4、遍歷這些key,計算出key對應的slot。

5、執行migrate命令,源節點是外部節點,目的節點是集群slot對應的節點,如果設置了--copy參數,則傳遞copy參數,如果設置了--replace,則傳遞replace參數。

6、不停執行scan命令,直到遍歷完全部的key。

7、至此完成整個遷移流程

這中間如果出現異常,程式就會停止。沒使用--copy模式,則可以重新執行import命令,使用--copy的話,最好清空新的集群再導入一次。

import命令更適合離線的把外部redis數據導入,線上導入的話最好使用更專業的導入工具,以slave的方式連接redis節點去同步節點數據應該是更好的方式。

下麵是一個例子

命令# ./redis-trib.rb import --from 10.0.10.1:6379 127.0.0.1:7001

上面的命令是把 10.0.10.1:6379上的數據導入到 127.0.0.1:7001這個節點所在的集群

 


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

-Advertisement-
Play Games
更多相關文章
  • cut 切割,簡單的取列命令。 -d 指定分隔符 -f 數字 取第幾列 -c n-m 取n列到m列字元。 //提取字元,不常用 例如:已知bqh.txt文件里的內容為“I am bqh myqq is 1147076062”現在需要文件中過濾出"bqh"和"1147076062"字元串,如何實現? ...
  • 什麼是Shell變數     在初等數學數學方程式中,我們會經常碰到類似於這樣的方程式: y=x+1 ,等號左右兩邊的 x 和 y 稱之為未知數。在編程裡面它們他們則代表變數名與變數值。     通過該示例,我們可以得出一個結論:簡單來說, 變數是編程中最基本 ...
  • 今天我突然發現我一點也忍受不了在UWP應用、wi10視窗、設置等界面無法使用滑鼠滑輪了。這個bug已經困擾了我差不多一年了,從買了這台筆記本就開始了。而且這個問題在中間的某一次升級系統後,也修複了,但後來卻又開始有了。雖然我為了這個問題已經在百度上百度了很多次了,但沒有一次可以幫到我。百度上的解答只 ...
  • 定義一個變數aaa 實現計算的四種方法: 簡單shell小例子:利用for迴圈列印字元小於7的單詞 ...
  • 1 #!/bin/bash 2 # 功能描述:LAMP自動安裝腳本 3 4 # 初始化 5 if [ "$(cat /etc/system-release | awk '{print $(NF-1)}' | awk -F"." '{print $1}')" -ne 7 ] 6 then 7 echo... ...
  • VPN 為了防止信息泄露,節省搭建專線私有網路成本,在互聯網上構造一個虛擬的網路 TSL/SSL 對http通信進行對稱加密,發送公鑰時採用的公鑰加密方式 ...
  • 一、命令介紹 uptime命令 uptime命令用於查看系統負載信息以及系統運行時間等。 free命令 free命令用於查看當前系統中記憶體使用量信息。 二、實例 uptime命令實例 直接運行 uptime命令 左面第一條信息14:45:40 , 是當前系統時間 第二條信息 up 24min ,指系 ...
  • Linux I/O重定向 標準輸入(stdin):文件描述符0 標準輸入(stdout):文件描述符1 標準錯誤(stderr):文件描述符2 file descriptors(FD,文件描述符 或 Process I/O channels); 進程使用文件描述符來管理打開的文件 0, 1, and ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...