主頁 > 前端設計 > 玩轉Redis|學會這10點讓你分分鐘拿下Redis,滿足你的一切疑問

玩轉Redis|學會這10點讓你分分鐘拿下Redis,滿足你的一切疑問

2020-11-16 03:32:59 前端設計

前言

Redis是一個開源的使用ANSI C語言撰寫、支持網路、可基于記憶體亦可持久化的日志型、Key-Value資料庫,并提供多種語言的API,從2010年3月15日起,Reids的開發作業由VMware主持,Redis能運行在大多數POSIX(Linux,*BSD,OS X和Solaris等)系統上,

和普通的Key-Value結構不同,Redis的Key支持靈活的資料結構,除strings,還有hashes、lists、sets和sorted sets等結構,正是這些靈活的資料結構,豐富了Redis的應用場景,能滿足更多業務上的靈活存盤需求,

Redis的資料都保存在記憶體中,而且底層實作上是自己寫了epoll enent loop部分,而沒有采用開源的libevent等通用框架,所以讀寫效率很高,為了實作Redis的持久化,Redis支持定期重繪(可通過配置實作)或寫日志的方式來保存資料到磁盤,

公眾號:「淺羽的IT小屋」

1、Redis的核心概念

「Redis是什么:」

  • MySql/Oracle:是一個關系型的資料庫(關系型的資料庫中存在表以及表與表之間關聯關系

  • Redis:是一個no sql的資料庫--->還是資料庫(非關系型的資料庫)

  • 非關系型的資料庫:簡單來說非關系型的資料庫不像關系型的資料庫那樣存在表以及表之間關聯關系,非關系型的資料庫中只存在鍵值對

  • 非關系型的資料庫中實際上,只有鍵值對形式的存盤,就像Map這種集合一樣,只存在鍵值對

  • Redis實際上就是一個基于鍵值對形式的檔案存盤系統而已

「疑問:」

  • 我們是否掌握Redis之后,就不會使用關系型資料庫(mysql/oracle)呢?

不是的 一般在進行開發的時候 我們一般情況下 都是使用 關系型資料庫和非關系型資料庫進行混用  各取所長 已達到用戶的好的體驗效果
不是全部用Redis也不是全部用mysql
常見的非關系型的資料庫:mogodb

2、Redis能干什么?

「主要用途:」

  • 百度上面的單點登錄(SSO)

  • 商城上面的評論

  • 商城上面的積分

  • 購物車

  • 商城上的快取(主要是指的是:所有用戶公用的資料)

  • 最新最熱商品的計算

  • 訊息佇列的實作

  • ...

3、Redis的特點

「用戶管理命令:」

  • 基于記憶體的(資訊是在記憶體中的 訪問的速度特別快)

  • 資料結構簡單(Key-Value)

  • 支持資料的持久化(能夠將記憶體中的資料同步到硬碟)

4、Redis的安裝

「安裝流程:」

  • 下載地址:http://redis.io/download

安裝步驟:

    1 首先需要安裝gcc,把下載好的redis-3.0.0-rc2.tar.gz 放到linux /usr/local檔案夾下
       yum install gcc

    2 進行解壓 tar -zxvf redis-3.0.0-rc2.tar.gz

    3 進入到redis-3.0.0目錄下,進行編譯 make

    4 進入到src下進行安裝 make install  驗證(ll查看src下的目錄,有redis-server 、redis-cil即可)

    5 建立倆個檔案夾存放redis命令和組態檔

     mkdir -p /usr/local/redis/etc

     mkdir -p /usr/local/redis/bin

    6 把redis-3.0.0下的redis.conf 移動到/usr/local/redis/etc下,
 
      cp redis.conf /usr/local/redis/etc/

    7 把redis-3.0.0/src里的mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-dump、redis-cli、redis-server 
     檔案移動到bin下,命令:

     mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin

    8 啟動時并指定組態檔:./redis-server /usr/local/redis/etc/redis.conf(注意要使用后臺啟動,所以修改redis.conf里的      daemonize 改為yes)

    9 驗證啟動是否成功:
ps -ef | grep redis 查看是否有redis服務 或者 查看埠:netstat -tunpl | grep 6379

     進入redis客戶端 ./redis-cli 退出客戶端quit
/exit退出redis服務: 
    (1)pkill redis-server 、
    (2)kill 行程號、
                            
    (3)/usr/local/redis/bin/redis-cli shutdown 

5、Redis中的資料型別以及資料型別的使用場景

「資料型別及使用場景:」

 String

      應用場景是什么?普通的資料快取這種一般就放到這里面  應用場景比較廣   因為他就是一個鍵值對的字串而已

     List(可以重復的)

      應用場景:這個一般用在:博客的關注、博客的評論、博客的積分

     Hash

      應用場景:SSO單點登錄

     Set(無序但是不重復)

      應用場景:這個一般用在和List一樣但是不重復的   

    SetSort

      應用的場景:最新最熱的商品(有序)

6、Redis中的常用命令(資料型別相關)

「常用命令:」

 set key value:    設定值
  
    get key           獲取某一型別的值

    keys *            查看所有的鍵

    
    del key1,key2..    洗掉一個或者多個資料

    rename 原來的key   現在key的名字    從新給鍵命名

    keys *  將當前資料庫里面的所有鍵排列出來


    //在Redis中默認有16個資料庫  資料庫的下標是0-15   默認存盤資料的是會存盤到 0號資料庫里面

    select index    選中某一個資料庫

    keys *         支持模糊查詢

    exists key      判斷當前資料資料庫中是否存在某一個特定的key(注意:不是所有資料庫  而是當前操作的這個資料庫)

    type key       判斷值的型別

    expire key 時間(單位秒鐘)   設定key的過期時間

    ttl key     查看key的過期時間

    persist  key    (把某一個key設定成永久有效)   

    set key value    存盤資料

    mset key value key value  key value    一次性設定多個鍵值對  注意:中間是沒有任何符號的

    mget a1 a2 a3 a4     一次性獲取多個值

    append key1 value    在某一個key對應的值上面追加值

    getset key value     先獲取key對應的值  然后再將后面的值 賦值給key

    mgetset key value key value   ....    同時為多個鍵設定值

    incr key    自增1

    incrby key step    每一次在原來的值上面增加 步長

    decr key    自減1

    decrby key step    每一次在原來的值上面減少 step


  Hash資料型別的方法

    Hset field key value   ---->設定相關的值                      HSet user userToken userInfo

    Hget field key value   ---->獲取設定的值

    hlen field             ---->獲取的是當前hash里面一共的長度

    hmset field key value ...  --->一次性設定多個鍵值對到某一個名字中

    hsetnx field key value...  --->不存在的時候再來創建這個值和用戶

    hkeys *                ---->查看所有的鍵

    hincrby field key      ---->自增

    hexists field          ----->查看是否存在


  List資料型別對應的值

    lpush key value  ----->向里面添加值

    lset key index value --->修改某一個位置的值

    lpop key         ----->彈堆疊(獲取這個值)

    lrem key count value ---->洗掉list集合中的值

    
  Set集合

    sadd key value...   ---->向set集合中添加值

    spop key            ---->獲取set集合添加進去的值

    smove key           ---->洗掉key

    
  SortSet 

     zadd key value score ---->表示的是添加元素到key中  score的意思是排序的位置

     zrange value 范圍(開始-結束) --->表示的是獲取某一范圍內的資料

     zrem value :洗掉某一個值

7、Redis中的資料持久化問題

「持久化方式:」

  • 持久化方式有兩種 rdb aof

  • 持久化:簡單來說就是記憶體和資料寫入到硬碟的程序,就叫資料的持久化

  • 如果是記憶體的資料在斷電的情況下,資料會發生丟失,所以我們的記憶體資料是需要持久化的

「rdb模式:」

  rbd模式(開發一般都不用): 是根據我們的時間片來判斷什么時候資料和硬碟進行同步  也就是說假設在一定的條件下才會將資料進行持久化(需要滿足一定的條件)、rdb模式在使用的時候會首先將記憶體資料寫入到零時檔案 、當這個記憶體的資料寫完成的時候 就會洗掉原來的rdb檔案,重新將零時檔案中的內容寫入到rdb檔案中

    1>:條件要成立才寫(條件:)

    2>:先寫入零時的檔案---->洗掉rdb檔案----->寫入rdb檔案

       因為要將記憶體中的所有資料寫入到零時檔案  相對來說需要更加頻繁的去操作IO

    rdb模式適合備份


   #表示的是在900秒之內有一個key發生改變那么就要和硬碟同步
   save 900 1
   #在300秒時間之內 如果有10個key發生改變那么就要和硬碟同步
   save 300 10
   #在60秒的時間內如果有10000個key發生改變那么就要和硬碟同步
   save 60 10000

「aof模式:」

  aof模式:這種模式是相當于在原來的日志基礎上來進行追加、實際上就相當于是 只是同步 改變了的內容  未改變的內容不用同步

      他不會頻繁的去操作IO

      要使用aof模式:

      appendonly yes

      #只要有一個key發生改變那么立馬和后臺同步  這種模式呢不會丟資料但是  效率不高  一般不推薦
      # appendfsync always
      # 這個表示每秒鐘和硬碟同步一次
      appendfsync everysec
      # 這個和記憶體的緩沖區有關 緩沖區滿了自動同步  沒滿的話那么就只有等
      # appendfsync no

8、Redis的主從復制問題(配置從服務器)

「主從復制:」

 假設現在我有一種策略:這種策略就是 能夠將訪問Redis服務器的請求分成兩類(讀、寫)
 
   然后將讀放到一部分的服務器上、寫這個操作放到另外的一部分的服務器上、這樣就能在3W并發上完成服務器的所有的請求
   
   將服務器上的讀和寫進行分離 又稱為讀寫分離資料庫的主從復制實際上完成的最終的功能就是讀寫分離

   主從復制:實際上指的是  主服務器來實作寫,從服務器來實作讀、所有的請求都經過主服務器來完成

   主從復制的配置實作

「主從復制的步驟:」

 clone服務器之后修改slave的IP地址

    修改組態檔(從服務器的組態檔)  

 vim /usr/local/redis/etc/redis.conf 

    第一步:slaveof 主機地址(eg:119.23.220.148)
 
 bind 0.0.0.0

    第一步下:
     
        #slaveof <masterip> <masterport>
        #改的第二個地方
        slaveof 112.74.49.17 6379

    第二步:masterauth<master-password>(這里可以不用設定)
 
 cd /usr/local/redis/bin/
 
 ./redis-cli

    使用info 查看role角色可以知道主服務或者從服務

9、Redis的哨兵模式

「哨兵模式:」

  • 單點問題:簡單來說就是一臺服務器掛了,所有服務器都不能用了

  • 哨兵模式的出現就是為了解決單點問題的

 哨兵:站崗的

   哨兵模式實際上是個程式、這個程式呢實際上就是用來檢測主服務器的狀態的,一旦主服務器掛了、那么從服務器就會進行投票選舉,按照預先設計的選舉策略,最終選舉出新的主服務器

「哨兵模式的實作:」

  哨兵模式的實作:(哨兵是一個獨立的程式和redis本身的運行是沒有關聯的)

   任意的一臺機器上面去啟動哨兵的程式(從服務器上)

   1>:quit  shutdown 退出redis

   2>:copy sentinel.xml到etc這個檔案下

   3>:修改 sentinel.xml這個檔案  

      dir   -> /usr/local/redis/etc(這個是告訴你路徑)

      sentinel monitor mymaster ip 埠 投票選舉的次數

      sentinel down-after-milliseconds mymaster 5000  多久進行檢測一下主節點活著沒有

   啟動哨兵  就必須跟上 sentinel這個組態檔

   ...server/  ...sentinel.xml --sentinel &

10、Redis的集群模式

「集群搭建流程:」

  1>:你可以找6臺機器來進行安裝

  2>:你可以找一臺機器開6個埠來進行安裝

首先要將redis.conf 復制到我們的etc下
 cp /usr/local/redis-4.0.6/redis.conf /usr/local/redis/etc/

第一步驟:

    mkdir -p /usr/local/redis-cluster   //創建檔案夾

第二步驟

     mkdir 500*    在剛剛創建的這個檔案夾里面創建6臺服務器的 組態檔的檔案夾
 
第三步驟

     把原來的Redis.cnf檔案copy到我們的500*當中去

第四步驟

     修改配置
 
     daemonize yes

     port 500*

     bind 192.168.108.135 改成 0.0.0.0

     dir "/usr/local/redis-cluster/500*/" 最好打上""

     cluster-enabled yes 這個需要打開注釋

     cluster-config-file nodes-500*.conf 這個需要打開注釋

     cluster-node-timeout 5000 這個也需要打開注釋

     appendonly yes


 第五步驟

   安裝ruby的相關工具

   yum install ruby

   yum install rubygems

   gem install redis  (報錯版本低了就執行 安裝rvm到第9步驟....)

   安裝rvm

    gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

    \curl -sSL https://get.rvm.io | bash -s stable

    然后進入cd /usr/local/目錄下看是否多個了rvm
 
    然后進入 /usr/local/rvm/archives

   再進行壓縮檔案的解壓  tar-zxvf rvm-1.29.7.tgz

   3.source /usr/local/rvm/archives/rvm-1.29.7/scripts/rvm 添加一個軟連接 相當于windows創建一個快捷方式,相當于windows添加一個環境變數,找到這個命令的

    4. 查看rvm庫中已知的ruby版本

    rvm list known

    5. 安裝一個ruby版本

    rvm install 2.3.3

    6. 使用一個ruby版本

    rvm use 2.3.3

    7. 設定默認版本

    rvm remove 2.0.0

    8. 卸載一個已知版本

    ruby --version

    9. 再安裝redis就可以了

    gem install redis   
  
    開啟每一個服務器

 去阿里云服務器設定埠,并且服務器重啟下

     ./redis-server /usr/local/redis-cluster/700*/redis.conf

     創建這個集群
 進入cd /usr/local/redis-4.0.6/src/這個目錄中

  ./redis-trib.rb create --replicas 1 120.78.191.34:7001 120.78.191.34:7002 120.78.191.34:7003 120.78.191.34:7004 120.78.191.34:7005 120.78.191.34:7006

redis-cli --cluster create 106.54.13.167:5001 106.54.13.167:5002 106.54.13.167:5003 106.54.13.167:5004 106.54.13.167:5005 106.54.13.167:5006 --cluster-replicas 1

    登錄客戶端實作驗證
  ./redis-cli -c -h 192.168.108.137 -p 5001

 Jedis進行單單機的訪問/連接池下的訪問/訪問集群

   Redis資料庫的訪問是要依賴于Jedis

結語

本篇關于Redis的介紹就先到這里結束了,后續會出更多關于Redis系列更多文章,謝謝大家支持!

如果你覺得淺羽的文章對你有幫助的話,請在微信搜索并關注「 淺羽的IT小屋 」微信公眾號,我會在這里分享一下計算機資訊知識、理論技術、工具資源、軟體介紹、后端開發、面試、作業感想以及一些生活隨想等一系列文章,所見所領,皆是生活,慢慢來,努力一點,你我共同成長...

我建立了一個技術群,如果你想了解到更多關于IT行業的技術以及生活中遇到的問題,歡迎小伙伴進群交流,只需添加我的微信,備注進群即可,期待你們的加入,

往期推薦

吐血推薦|2萬字總結Mac所有應用程式、軟體工具和相關資料


超級詳細|Linux系統下從0到1的玩法大全


簡化開發|Lombok神器帶你消除冗余代碼


異步編程|五分鐘讓你學會區域重繪Ajax技術


全面決議|搞懂Nginx這一篇就夠了


干貨|SpringBoot JMS(ActiveMQ)API實踐應用詳解


徹底了解|利用Apache CXF框架開發WebService


極速上手使用Docker,這篇文章就夠了!


淺羽

留言區

點個贊,證明你還愛我

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/218944.html

標籤:其他

上一篇:微信支付商戶號如何開通0.2%提現費率/手續費?

下一篇:請問JQ怎么獲取

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more