大型網站優化-memcache技術

来源:http://www.cnblogs.com/nyxd/archive/2016/04/08/5370364.html
-Advertisement-
Play Games

大型網站優化-memcache技術 memory+cache 記憶體緩存 memcache簡介 memcache是一套分散式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問資料庫的網站訪問速度提升效 ...


大型網站優化-memcache技術

memory+cache 記憶體緩存

memcache簡介

memcache是一套分散式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問資料庫的網站訪問速度提升效果十分顯著 。這是一套開放源代碼軟體,以BSD license授權發佈。【摘取自百度百科】

官網:http://memcached.org/

 

分散式:多台Memcache伺服器來管理數據的架構。

緩存系統:將用戶查詢的數據緩存到記憶體之中,方便下次直接從記憶體中獲取。減少了磁碟IO的開銷。

什麼是nosql?(sql 關係型資料庫)

答:MySQL 叫做關係型資料庫(主要的特點是都是一個二維表結構(表中的行和列),表與表之間是由關係的)(oracle(Java)、db2、sqlserver

非關係型數據:就是不使用sql語句作為查詢的資料庫(保存數據的系統),並且沒有嚴格意義上的二維表的概念。它的數據結構全部是一張巨大的hash表(key-value)

hash表好處: 時間複雜度是 0(1):隨著數據的增加,查詢時間不會存在數量級(1s)的變化。

hash表壞處: hash碰撞 不同 key 對應同一個值

 

key1 ===MD5(sql)

Asion

key2

12

key3

shenzhen

key4

iphone

 

  1. 使用原理

    在使用的時候,先從nosql資料庫裡面獲取,有的話直接返回,沒有的話就先從MySQL獲取,然後緩存到memcache裡面,下次直接從memcache裡面返回。

     

  2. memcache與MySQL的區別
  3. 沒有使用SQL語句
  4. memcache沒有MySQL中的表的概念,都是使用key-value來保存的
  5. memcache的數據是保存到記憶體中的,斷電即丟失(如何保存數據的持久性?)

    1. MemcacheDB可以持久化保存數據。2. repcached也可以實現數據的持久化

     

    註意:NoSQL是否能夠取到MySQL(關係型資料庫)?

    答: nosql的存在永遠不是為了取代MySQL(關係型數據),是關係型數據的一個補充。因為關係型資料庫有它獨特的地方(事務,存儲過程)。

     

    Nosql主要使用的場景:社交型網站(人人、校內、豆瓣)

     

    課下瞭解:什麼是C10K問題?C100K

    答:c10k 代表的含義就是當網站的併發數達到 1w 時候網站的整體架構會全部的更新,就叫做c10k,目前已經被NoSQL資料庫完美的解決。但是又有 c100k 的問題?

    架構網站:

    http://www.infoq.com/

     

    memcache安裝(使用埠11211)

  6. Windows下安裝

    1.1 直接將memcached文件放置到某一文件夾下(千萬不要使用中文命名的文件夾 | 空格)

    1.2 在cmd下執行如下命令(不能關閉)可以使用Ctrl+c 終止

    memcache的埠 11211

    1.3 查看是否啟動(新開一個視窗),執行如下命令

    # netstat -an

     

     

  7. Linux下安裝
    1. putty--》遠程連接Linux的一個客戶端工具
      1. 註意:一般連接不上(防火牆)
        1. 關閉防火牆

    2. selinux沒有關閉

          

      讓selinux立即生效

       

    2.1 環境準備

    在Linux環境下,需要gcc、g-c++、make(makefile)、cmake、autoconfig(configure)、libtool等工具

    在Linux下聯網的情況下,使用如下命令

    # yum install -y gcc make cmake autoconfig libtool

    -y 不需要使用確認互動式

     

    2.2 編譯安裝memcached

    memcached依賴於 libevent庫,因此需要先安裝,分別到各自的官網下載穩定版

    libevetnt官網:http://libevent.org/

    memcache官網:http://memcached.org/

     

    先編譯安裝libevent,在編譯安裝memcached,同時在安裝memcached需要指定libevent的安裝路徑

    具體步驟:

    上傳

  8. 先下載libevent,解壓,並安裝(一般Linux下軟體安裝都是放在 /usr/local/src目錄下,安裝的軟體一般放在/usr/local/NAME)

    # ./configure --prefix=/usr/local/libevent && make && make install

    b. 安裝memcache,解壓、編譯、安裝

    # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make install

     

    2.3 memcached的啟動

    # /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nobody -vv

    註意:此時memcached成功啟動,但把信息輸出到控制台。

    如果想讓memcached作為服務在後臺啟動,只需要加上-d選項(daemon 後臺)

    # /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nobody -d

     

    如何查看伺服器是否正常啟動?

    # ps axu | grep memcached

     

    如果需要查看參數信息,使用 memcached -h 查看幫助:

    操作memcache

    memcached的客戶端與伺服器端的通信很簡單,基於文本的協議,類似http協議,可以直接使用Telnet來做交互

     

    使用Telnet操作(quit退出)

    # telent 伺服器的IP 11211

  9. Windows下

    連接之後 使用 ctrl + ] 打開Telnet的回顯

  10. Linux下

     

    2. 基本命令:

    學習memcache的增刪改查命令:

    add key flag expire length

    key: 名稱

    flag: 1 memcache按照字元串的方式保存

    expire:過期時間,memcache時間

    length:數據長度(B)

    ※add 增加

    # add name 1 0 2 # 在memcache伺服器上添加一個key為的name值 長度為2個位元組,有效期長期有效

     

    如何理解expire

    設置緩存的有效期,有三種格式

  11. 設置秒數,從設置開始,n秒後失效
  12. 時間戳,到指定時間戳後失效
  13. 設置為0,不自動失效(特別註意,不是永久有效。a. 在memcache安裝時候,指定了一個最長的有效時間,預設是30天(源代碼) b. 可能不到30天,就會被擠出去)

    最近最少使用原則

     

    ※delete 刪除

    # delete key

     

    ※replace 替換

    # replace key flag expire length

     

    ※get 獲取

    # get key

     

    ※set 如果數據有 replace ,沒有則 add

    # set key flag expire length

    name存在:

    age不存在:

     

    ※incr 增加

    # incr age NUMBER

     

    ※decr 減少

    # decr age NUMBER

     

    ※stats 統計memcache伺服器信息

    # stats

     

    ※flush_all 清空所有數據

    # flush_all

    使用php操作memcache

  14. Windows下
  15. 到(http://downloads.php.net/pierre/)下載擴展dll文件
  16. 將該文件放到php的extension_dir 對應的目錄下
  17. 修改php.ini文件,加入 extension=php_memcache.dll,引入該文件
  18. 重啟Apache

     

  19. Linux下 (在Linux下如何為php開啟一個擴展,說一下通用方案
    1. 到(http://pecl.php.net/package/memcache)去下載擴展源碼

    beta :測試版:一般都有一些小bug,但是需要用戶去使用發現,如果有問題,可以給官方反饋。然後在做修複

    alpha:內部測試版:內部在開發的時候,使用的版本,一般這個版本bug眾多。但是這個版本往往有新的功能加入。(一般也是新公司才試試)alpha版本有一些補償。

    stable:穩定版:基本無bug,能夠穩定的運行。

     

    ftp使用的註意事項:

  20. vsftpd 是否正常的開啟 service vsftpd status
  21. 一般都只能使用普通用戶連接ftp(不能root來連接ftp)獲取使用 sudo
  22. 自己家目錄的大小空間不夠(上傳文件成功,但是顯示的大小為0)
  23. 防火牆是否關閉(iptables -F 關閉)(iptables -L)

     

     

    # cls

    # cd

    # vim .bashrc

     

    Linux下載末行模式下

    # :x 小寫 退出 wq

    linux在編輯模式下

    # Z 大寫

     

     

    1. 一般下載到 /usr/local/src 目錄下,解壓,併進入該文件夾內

    1. 使用當前php的phpize命令創建configure文件(必須在擴展目錄內

    # /usr/local/php/bin/phpize 絕對路徑phpize

    d. 利用上面生成的configure文件,收集系統信息 不需要指定安裝路徑

    # ./configure --with-php-config=/usr/local/php/bin/php-config 告訴它如何去找php配置文件

    e. 執行編譯、安裝

    # make && make install

    註意:可以查看上述命令執行完成之後的結構

    # ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    1. 修改php.ini配置文件,重啟Apache

     

    註意:在Linux下,如何查看php.ini配置文件的位置?

    解決:phpinfo();

     

    註意:在Linux下,修改配置文件之前,一定要備份

    php.ini-backup-2016-1-12

     

    註意:.so是什麼文件?

    .so是Linux下的共用對象,類型Windows下的.dll文件

     

     

     

    註意:Linux下,關閉一個服務 可以使用

    # pkill -9 httpd

    # ps aux | grep httpd

    #ps uax | grep httpd

     

    將上面生成的地址增加到php.ini配置文件,如下

    extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    extension=memcacahe.so

    1. 測試

    建立一個test.php文件,測試php是否有memcache的一個模塊

    php操作memcache,保存並獲取值

    memcached的記憶體管理與刪除機制

     

    註意:Memcache最大的value也只能是1M的空間。

     

    註意:記憶體碎片化永遠都存在,只是哪一種方式可以使得記憶體碎片最小。

     

    1. 什麼是記憶體碎片化?

    在使用這種記憶體緩存系統的時候,由於不斷的申請,釋放,就會形成一些很小的記憶體片段,無法被利用,這種現象就叫做,記憶體的碎片化。這個小紅塊就是操作系統無法使用的空間。

     

  24. 如何解決?

    memcache利用slab allocator的方式來管理(每個slab class大小為1M

    最小的單元叫做 chunk(小塊):存放數據的倉庫

    多個小單元組成一個chunks:多個小塊組成(所有的小塊的大小全部一致)

    每個 slab class的大小為1M

     

  25. memcache如何選擇合適的大小?

    註意:如果 122Bytes的slab裝滿了,現在有一個100Bytes的數據來了,存到哪裡去?

    答:肯定不會存在144,還是存在122這個chunk裡面,利用LRU演算法來實現數據存儲。

     

  26. 固定chunk帶來的記憶體浪費,22B

     

  27. factor調優

    memcached在啟動的時候,會按照一定的大小來組織slab class,可以通過-f 來指定

    預設是1.25,相鄰chunk之間的比值就是增加因數。可以根據自己網站的業務調整緩存因數的大小。

    是因為每個業務不一樣,所需要的最小的chunk是不一樣的。這個參數使得我們的系統變得更加適應自己的業務,因為數據可以自己設定大小。

     

  28. memcache的惰性刪除

    memcached內部不會監視記錄是否過期,而是在get時查看記錄的時間戳,檢查記錄是否過期。這種行為被稱為lazy(惰性)expiration。因此,好處是memcached不會在過期監視上耗費CPU時間。

    比如:有 set(name, asion, 0, 3600) 過了3600秒就失效,失效後,並不會自動刪除,只有當get查詢時,檢測是否過期,如果過期則刪除。

    例如 # add name 1 8 2 當8s後,是失效,還是不存在?通過stats分析

    分析:是失效你,而不是不存在,只有在下一次去獲取時候,memcache才會去檢測它是否過期,過期了就刪除

     

  29. memcache的LRU演算法

    memcached會優先使用已超時的記錄的空間,但即使如此,也會發生追加新記錄時空間不足的情況,此時就要使用名為 Least Recently Used(LRU)機制來分配空間。

    顧名思義,這是刪除"最近最少使用"的記錄的機制。因此,當memcached的記憶體空間不足時(無法從slab class 獲取到新的空間時),就從最近未被使用的記錄中搜索,並將其空

    間分配給新的記錄。從緩存的實用角度來看,該模型十分理想。

     

    當mecache裡面的數據空間(預設是64M)已經占滿了,再繼續存儲數據能否存儲呢?

    答:能存儲,要刪除過期的數據,如果都沒有過期,則刪除最不活躍的數據,騰出空間給後面添加數據。

    例如:以122Bytes的slab舉例,當數據裝滿後,如果來了一個100Bytes數據,如何處理?(即使永久有效,也會被踢)

    分析:記憶體的管理 LRU演算法 、FIFO演算法

     

  30. memcache的一些參數 Ctrl+C

    註意:在vim下如果輸入了 ctrl+s 可以使用 ctrl+q 退出

    -p 監聽的埠

    -l 連接的IP地址, 預設是本機

    -d start 啟動memcached服務

    -d restart 重起memcached服務

    -d stop|shutdown 關閉正在運行的memcached服務

    -d install 安裝memcached服務

    -d uninstall 卸載memcached服務

    -u 以的身份運行 (僅在以root運行的時候有效)

    -m 最大記憶體使用,單位MB。預設64MB

    註意:如果系統是32位的,則最大限製為2G,如果系統是64位,則無限制。

    -M 記憶體耗盡時返回錯誤,而不是刪除項

    -c 最大同時連接數,預設是1024

    -f 塊大小增長因數,預設是1.25

    -n 最小分配空間,key+value+flags預設是48

    -h 顯示幫助

    -v 輸出警告和錯誤信息

    -vv 列印客戶端的請求和返回信息

    -i 列印memcached和libevent的版權信息

     

    實際使用場景

    保存:1. 文件 2. mysql

    問題:如果一個文件夾下session文件過多,檢索變慢,如何處理?

    答:分層處理

    使用Memcache來保存,Memcache使用分散式來保存(拿多台Memcache做存儲)

     

    使用memcache保存session

     

    1. 修改php.ini文件,配置信息如下

        session.save_handler = memcache #代表使用memcache保存session

        session.save_path ="tcp://127.0.0.1:11211" # 指定memcache伺服器的地址和埠

  31. 測試

    1. 開啟session,保存session

  32. 從Memcache獲取session

    高級特性

    分散式memcache配置

    什麼是分散式?

    由於單台memcache的服務能力有限,可以使用多台memcache來提供緩存的功能,這種架構就叫做memcache的分散式緩(集群)存系統

     

    如何實現?

    可以這樣理解,如何將數據分散答各台Memcache伺服器上。

     

    在客戶端實現分散式,在數據保存之前,根據一定的演算法,將數據保存到那台memcache伺服器上,在獲取數據的時候,按照前面相同的演算法去對應的memcache伺服器上獲取數據

     

    分散式演算法

  33. 取摸演算法

    將key的值對伺服器的台數取餘,然後將對應的value值保存到對應的餘數的那台memcache伺服器上,一般這個hash函數 crc32( key ) % 3

    crc32()這個函數可以使得一個字元串變成一個32位的整數

     

    壞處:當某一臺伺服器宕機或者需要增加一臺伺服器的時候,這個時候緩存數據基本全部失效,因為除數變了。 不嚴格的公式, 命中率 = 取到數據/總數 1/N N代表伺服器的台數

     

    引發出來的問題:當memcache宕機之後,緩存數據失效,這個時候MySQL的壓力會驟增,

    這個時候,MySQL會宕機,然後在重啟MySQL,MySQL會在短時期內再次宕機,然後,稍微延遲一點(緩存已經重新建立了一部分),又宕機。隨著時間的慢慢推移,MySQL基本上趨於穩定,緩存系統成功建立。因為緩存數據不存在,所有的請求全部要轉向MySQL來提供,這種現象就叫做memcache的雪崩現象。

     

    概圖:

     

     

  34. 一致性hash實現分散式

     

  35. 假想有一個圓環,分佈著從 0 到 2^32 這麼多個正整數

     

  36. 然後在將伺服器的節點數通過hash函數(crc32())運算後,按照順時針的方向映射到上面的圓環上

     

  37. 將需要存儲的數據的key也按照上面的hash函數運算後,按照順時針的方向保存到一個不比自己小的節點上

     

    註意:只要是memcache宕機,就一定會有數據的丟失。但是要想辦法讓數據丟失的最少,使用一致性hash,即使有一臺伺服器宕機,也只是影響一臺伺服器上的數據。

     

    虛擬節點:分擔任務

    緩存雪崩現象

    雪崩造成的原因?

  38. 由於演算法不當,取摸演算法,造成大量緩存失效,會引發雪崩

    解決方案:一致性hash演算法

     

  39. 緩存時間都是同一時間,緩存系統會在同一時間全部失效,這個也會造成雪崩

    解決方案:緩存時間設置成一個範圍內的隨機時間(3-9小時)

     

    由於某個memcache節點的緩存數據失效,導致其他memcache節點的緩存命中率下降,緩存中缺失的數據會去MySQL資料庫中查詢,短時期內,造成了MySQL伺服器壓力巨大,造成宕機,就叫做緩存雪崩現象

     

    當重啟MySQL之後,短期內再次宕機,但緩存數據已經建立了一部分,在MySQL反覆多次啟動之後,緩存全部重建完畢,MySQL不再宕機趨於穩定。

     

    解決方案:把緩存的時間設置成一個範圍內的隨機值(3-9小時),這樣就在不同的時間段失效,把重建的工作分擔到不同的時間上。

    memcache如何做高可用

  40. 使用repcached實現,全稱 replication cached是由日本人發明的memcached的高可用性技術,簡稱複製緩衝區技術。

     

  41. MemcacheDB是一個分散式、key-value形式的持久存儲系統由sina人員開發。它不是一個緩存組件,而是一個基於對象存取的、可靠的、快速的持久存儲引擎。協議跟memcache一致(不完整),所以很多memcached客戶端都可以跟它連接。MemcacheDB採用Berkeley DB作為持久存儲組件,故很多Berkeley DB的特性的他都支持。擴展
  42. 如何在Linux下給一個php添加一個擴展,說出通用步驟?

    答:

    1. 下載對應擴展源碼
    2. 上傳放入/usr/local/src/
    3. 解壓 併進入文件夾內
    4. 在文件夾內執行 絕對路徑下的 phpize /usr/local/php/bin/phpize
    5. 執行configure ./configure --with-php-config=/usr/local/php/bin/php-config
    6. make && make install
    7. 生成一個目錄文件,文件下麵有一個.so 結尾的文件
    8. 修改php.ini文件
    9. 增加 extension_dir = 目錄 extension= .so文件
    10. 重啟Apache
    11. 添加 phpinfo()
    12. 瀏覽器查看

     

  43. memcache的安全性如何解決?

    答:

    由於memcache的本身設計就是極為簡潔的,根本沒有設置許可權方面的限制。為什麼不設置許可權? 只提供緩存功能,為了精簡

  44. 放在內網 192.168.1.110 內網IP外網無法訪問
  45. 寫一個防火牆驗證規則,只允許自己規定IP的包可以轉進來,其他的全部丟棄

    192.168.1.221 ---224

    3. 當使用文件保存session文件時候,如果文件過多,如何處理?

    一般來說,超過65535個session文件的時候,這個時候session的獲取就會變得異常緩慢,意味php代碼執行很慢,如何解決?

    答:

    分層處理: 一個文件夾下建立A-Z開頭的文件夾 然後A_Z在建立

    使用memcache處理: 單台memcache處理能力有限,就使用分散式memcache來處理

  46. 如何理解負載均衡集群也是高可用集群,但有不是?

    答:負載均衡集群提供了高可用的能力,如果某一臺宕機之後,還是可以提供正常的服務,只是服務提供的有些吃力而已。

    因為負載均衡集群不提供keepalive的機制。監控機制

     

    案例:

    在項目中如何使用Memcache?

    Memcache存在的意義就是緩存數據,減輕MySQL的壓力。

     

  47. 書寫一個列表頁

  48. 詳情頁

     

    擴展

  49. Linux下安裝一個php的擴展的通用方法

    答:

  50. 下載對應的擴展的源碼 http://pecl.php.net/package/memcache
  51. 將對於的擴展上傳到Linux伺服器上,放在(/usr/local/src/下)
  52. 執行 tar -zxvf NAME.tar.gz
  53. cd NAME
  54. 執行絕對路徑下的phpize命名 (/usr/local/php/bin/phpize)必須在擴展包的目錄內
  55. 執行 ./configure --with-php-config=/usr/local/php/bin/php-config (--with-php-config=絕對路徑下的php-config的路徑,並且不需要指定安裝的路徑)
  56. make && make install
  57. 會生成一個目錄,在個目錄裡面有對於的NAME.so文件
  58. 去修改php.ini的配置文件,增加兩行信息

    extension_dir='上面生成的目錄'

    extension='NAME.so'

  59. 重啟Apache,然後使用phpinfo()函數測試一下,在瀏覽器輸入地址查看,搜索如果有Memcache,代表擴展成功的開啟。

     


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

-Advertisement-
Play Games
更多相關文章
  • /*f(i,j)表示以(i,j)為右下角的最大全0子矩陣的邊長若a[i][j]==1,f(i,j)=0否則:f(i,j)=min{ f(i-1,j),f(i,j-1),f(i-1,j-1) }+1 這樣求得的是最大全0正方形子矩陣要求長方形矩陣,上述思路行不通假設以(i,j)為右下角的最大矩陣=12 ...
  • 編譯多個C源代碼文件 當程式文件越來越多,修改了其中的一部分代碼文件,我們並不需要全部重新編譯,只需要編譯其中一部分就可以,下麵我們創建了一個launch程式,除了主程式,我們創建了3個功能代碼文件reaction.c pitch.c engine.c 首先將源代碼編譯為目標文件 gcc -c *. ...
  • 對集合操作進行簡單的進行測試速度,數據量20w,對map,list,set,array,queue進行遍歷測試時間對比。 先粘貼一段對這些集合的介紹: 1.1 Set介面 1.2 List介面 1.3 Queue介面 1.4 Map介面 下麵是測試代碼: 時間:array:4ms,list:17ms ...
  • 一、源文件的編寫 Java是完全面向對象的語言,所以Java的所有操作都是基於類(class)完成的。Java中所有程式的代碼都需要放在一個類中,類用關鍵字class聲明,在class之前可以添加一些修飾符,Java應用程式的源文件由若幹個書寫形式相互獨立的類組成。 1.例子: (1)import語 ...
  • 本人在寫學生信息管理系統時遇到一個很頭疼的錯誤——error LNK2005重覆定義錯誤,苦思冥想百度谷歌bing之後都沒能解決問題,於一清早剎那間覺得知道問題出在哪兒了,於是乎起床、開機、修改代碼一氣呵成,終於0 error(s)\0 warning(s)。 error LNK2005錯誤分為好幾 ...
  • java線程的五種狀態其實要真正高清,只需要明白電腦操作系統中進程的知識,原理都是相同的。 系統根據PCB結構中的狀態值控制進程。 單CPU系統中,任一時刻處於執行狀態的進程只有一個。 進程的五種狀態:初始態,執行態,等待態,就緒態,終止態。 執行狀態:一個進程獲得了必要資源,並且在CPU上執行時 ...
  • 1. 檢測列表是否是空 沒必要去調用len方法去檢測一個列表是否是空,因為空列表求值就是False的。 可以用下麵的方法代替: 2. 在迭代列表的同時獲取元素的索引值 有時候你需要在迭代一個列表的同時獲取每個元素的索引值。通常的做法是: 更好的做法是: 3. 列表排序 創建一個persons列表: ...
  • DOS和Windows最大的不同在於DOS命令方式操作,所以使用者需要記住大量命令及其格式使用方法,DOS命令分為內部命令和外部命令, 內部 命令是隨每次啟動的COMMAND.COM裝入並常駐記憶體,而外部命令是一條單獨的可執行文件。在操作時要記住的是,內部命令在任何時候都可以使 用,而外部命令需要保 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...