day02-Redis命令

来源:https://www.cnblogs.com/liyuelian/archive/2023/04/16/17323965.html
-Advertisement-
Play Games

Redis命令 1.Redis數據結構介紹 Redis是一個key-value的資料庫,key一般是String類型,value的類型多種多樣,value常見的八種類型: Redis支持五種基本的數據類型:string(字元串),hash(哈希),list(列表),set(集合)及zset(sort ...


Redis命令

1.Redis數據結構介紹

Redis是一個key-value的資料庫,key一般是String類型,value的類型多種多樣,value常見的八種類型:

image-20230416153745533

Redis支持五種基本的數據類型:string(字元串),hash(哈希),list(列表),set(集合)及zset(sorted set,有序集合)。

  • 各個數據類型應用場景:
類型 簡介 特性 場景
String(字元串) 二進位安全 可以包含任何數據,比如jpg圖片或者序列化的對象,一個鍵最大能存儲512M ---
Hash(字典) 鍵值對集合,即編程語言中的Map類型 適合存儲對象,並且可以像資料庫中update一個屬性一樣只修改某一項屬性值(Memcached中需要取出整個字元串反序列化成對象修改完再序列化存回去) 存儲、讀取、修改用戶屬性
List(列表) 鏈表(雙向鏈表) 增刪快,提供了操作某一段元素的API 1,最新消息排行等功能(比如朋友圈的時間線) 2,消息隊列
Set(集合) 哈希表實現,元素不重覆 1、添加、刪除,查找的複雜度都是O(1) 2、為集合提供了求交集、並集、差集等操作 1、共同好友 2、利用唯一性,統計訪問網站的所有獨立ip 3、好友推薦時,根據tag求交集,大於某個閾值就可以推薦
Sorted Set(有序集合) 將Set中的元素增加一個權重參數score,元素按score有序排列 數據插入集合時,已經進行天然排序 1、排行榜 2、帶權重的消息隊列

不同的數據類型的操作會對應不同的命令,Redis為了方便我們學習,將操作不同數據類型的命令做了不同分組分組,在官網可以查看,也可以通過命令行查看:

image-20230416160212084

2.Redis通用命令

通用指令是部分數據類型都可以使用的指令,常見的可以通過官方文檔選擇Generic分組查看:

image-20230416160417545

或者使用命令行查看:help @generic

127.0.0.1:6379> help @generic

  DEL key [key ...]
  summary: Delete a key
  since: 1.0.0

  DUMP key
  summary: Return a serialized version of the value stored at the specified key.
  since: 2.6.0

  EXISTS key [key ...]
  summary: Determine if a key exists
  since: 1.0.0
  
  ....

這裡介紹一些常見的通用命令:

  • keys 在本庫中,查看符合輸入模板的所有key的值:(不建議在生產環境上使用)

    #命令解釋
    127.0.0.1:6379> help keys #通過help [command] 可以查看一個命令的具體用法
    
      KEYS pattern
      summary: Find all keys matching the given pattern
      since: 1.0.0
      group: generic
      
    #例子 
    127.0.0.1:6379> keys *
    1) "marry"
    2) "jack"
    127.0.0.1:6379> keys j*
    1) "jack"
    
  • del 刪除一個或者多個key

    #命令解釋
    127.0.0.1:6379> help del
    
      DEL key [key ...]
      summary: Delete a key
      since: 1.0.0
      group: generic
      
    #例子
    127.0.0.1:6379> keys *
    1) "foo"
    2) "marry"
    3) "jack"
    4) "tom"
    127.0.0.1:6379> del tom marry #一次可以刪除多個key,返回的值是刪除key的數量
    (integer) 2
    127.0.0.1:6379> keys *
    1) "foo"
    2) "jack"
    
  • exists 判斷一個或多個key是否存在

    #命令解釋
    127.0.0.1:6379> help exists
    
      EXISTS key [key ...]
      summary: Determine if a key exists
      since: 1.0.0
      group: generic
    
    #例子
    127.0.0.1:6379> exists jack  foo  tom mary #返回值是查詢的key存在的個數
    (integer) 2
    
  • expire 給一個key設置有效期,到期時該key自動刪除

    #命令解釋
    127.0.0.1:6379> help expire
    
      EXPIRE key seconds
      summary: Set a key's time to live in seconds
      since: 1.0.0
      group: generic
    
    #例子
    127.0.0.1:6379> expire k1 5 #設置k1的過期時間為5秒
    (integer) 1
    127.0.0.1:6379> get k1 #5秒後查看,發現已經給被刪除了
    (nil)
    
  • ttl 查看一個key的剩餘有效期

    #命令解釋
    127.0.0.1:6379> help ttl
    
      TTL key
      summary: Get the time to live for a key
      since: 1.0.0
      group: generic
    
    #例子
    127.0.0.1:6379> ttl foo 
    (integer) -1 				#-1 代表該key為永久有效
    127.0.0.1:6379> expire foo 5
    (integer) 1
    127.0.0.1:6379> ttl foo
    (integer) 2					#其他數字代表該key剩餘時間(秒)
    127.0.0.1:6379> ttl foo
    (integer) -2				#-2 代表該key已經過期
    

3.String類型

string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應一個 value。string 類型是二進位安全的。意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。string 類型是 Redis 最基本的數據類型,string 類型的值最大能存儲 512MB。

根據字元串的格式不同,又可以分為3類:

  • String:普通字元串

  • int:整數類型,可以做自增、自減操作

  • float:浮點類型,可以做自增、自減操作

不管是哪種格式,底層都是位元組數組形式存儲,只不過是編碼形式不同

  • String類型常見命令
    • set 添加或者修改已經存在的一個String類型的鍵值對
    • get 根據key獲取String類型的value
    • mset 批量添加多個String類型的鍵值對
    • mget 根據多個key獲取多個String類型的value
    • incr 讓一個整型的value自增1
    • incrby 讓一個整型的value自增並指定步長,例如 incrby num 2 #讓key為num對應的value自增2
    • incrbyfloat 讓一個浮點類型的數字自增並指定步長
    • setnx 添加一個String類型的鍵值對,前提是這個key不存在,否則不執行
    • setex 添加一個String類型的鍵值對,並且指定有效期

3.1key的層級格式

Redis沒有類似MySQL的Table的概念,我們該如何區分不同類型的key呢?例如,需要存儲用戶、商品信息到redis,有一個用戶id為1,有一個商品的id也恰好是1。

Redis的key允許有多個單詞形成層級結構,多個單詞之間用:隔開,例如:項目名:業務名:類型:id。由此我們可以根據層級關係來解決上面的問題:

user相關的key:項目名:user:1

product相關的key:項目名:product:1

如果value是一個Java對象,例如一個User對象,則可以將對象序列化為JSON字元串後存儲,例如:

127.0.0.1:6379> set olien:user:1 '{"id":1, "name":"Jack", "age": 21}'
OK
127.0.0.1:6379> set olien:user:2 '{"id":2, "name":"Rose", "age": 18}'
OK
127.0.0.1:6379> set olien:product:1 '{"id":1, "name":"小米11", "price": 4999}'
OK
127.0.0.1:6379> set olien:product:2 '{"id":2, "name":"榮耀6", "price": 2999}'
OK
127.0.0.1:6379> keys olien*
1) "olien:product:1"
2) "olien:product:2"
3) "olien:user:1"
4) "olien:user:2"
127.0.0.1:6379>

我們在可視化軟體查看,可以看到使用冒號隔開時,數據自然形成了不同的層級結構,這就可以避免id相同時的衝突,實現分層存儲。

image-20230416173926193

4.Hash類型

Hash 類型,也叫散列,其 value 是一個無需字典,類似 Java 中的 hashmap 結構。

Redis hash 是一個鍵值(key=>value)對集合。Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。每個 hash 可以存儲 2^32 -1 鍵值對(40多億)。

String結構是將對象序列化為json字元串後存儲,但當需要修改對象的某個欄位時很不方便:

image-20230416174559647

而Hash結構可以將對象中的每個欄位獨立存儲,可以針對單個欄位做CRUD操作:

image-20230416174524081
  • Hash常見的命令

    這裡的哈希表指的是一個hash類型(key-value[field-value])

    • HSET key field value[field2 value2...] 將哈希表 key 中的欄位 field 的值設為 value

      127.0.0.1:6379> HSET lucy id 2 age 10
      (integer) 2
      
    • HGET key field 獲取存儲在哈希表中指定欄位的值

    • HDEL key field [field2...] 刪除一個或者多個哈希表key的欄位

      127.0.0.1:6379> HDEL lucy addr age
      (integer) 2
      
    • HMSET key field1 [field2...] 同時將多個field-value(域-值)對設置到哈希表key中

      127.0.0.1:6379> hmset lucy name lucy id 5 age 18
      OK
      
    • HMGET key field1 [field2...] 獲哈希表中給定欄位的值

      127.0.0.1:6379> HMGET lucy id age name
      1) "5"
      2) "18"
      3) "lucy"
      
    • HGETALL key 獲取一個hash類型的key中的所有field和所有value

      127.0.0.1:6379> HGETALL lucy
      1) "name"
      2) "lucy"
      3) "id"
      4) "5"
      5) "age"
      6) "18"
      
    • HKEYS key 獲取哈希表key中的所有field

      127.0.0.1:6379> hkeys lucy
      1) "name"
      2) "id"
      3) "age"
      
    • HLEN key 獲取哈希表key中所有欄位的數量

      127.0.0.1:6379> HLEN lucy
      (integer) 4
      
    • HVALS key 獲取哈希表key中的所有value

      127.0.0.1:6379> hvals lucy
      1) "lucy"
      2) "5"
      3) "18"
      
    • HINCRBY key field increment 為哈希表key中的指定欄位的整數值加上增量increment

      127.0.0.1:6379> HINCRBY lucy age 100
      (integer) 118
      
    • HINCRBYFLOAT key field increment 為哈希表key中的指定欄位的浮點數值加上增量increment

      127.0.0.1:6379> HINCRBYFLOAT lucy score 30
      "90"
      
    • HSETNX key field value 只有在欄位不存在時,設置哈希表key中欄位的值

      127.0.0.1:6379> HSETNX lucy age 10086
      (integer) 0
      127.0.0.1:6379> HSETNX lucy addr beijing
      (integer) 1
      
    • HEXISTS key field 查看哈希表key中,指定的欄位是否存在

      127.0.0.1:6379> HEXISTS lucy age #返回值1表示存在,0表示不存在
      (integer) 1
      127.0.0.1:6379> HEXISTS lucy foo
      (integer) 0
      
    • HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的鍵值對

5.List類型

List 是簡單的字元串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。一個列表最多可以包含 2^32 - 1 個元素 (4294967295, 每個列表超過40億個元素)。

Redis 的 List類型與 Java 的LinkedList 類似,可以看做是一個雙向鏈表結構,可以同時支持正向檢索和反向檢索。

特征也和 LinkedList 類似:

  • 有序
  • 元素可以重覆
  • 插入和刪除速度快
  • 查詢速度一般

常用來存儲一個有序數據,例如朋友圈點贊列表,評論列表等。

下表列出了列表相關的基本命令:

命令首字元:R代表列表右側(Right),L代表列表左側(Left)

image-20230416184653538
命令及描述
BLPOP key1 [key2 ] timeout 移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
BRPOP key1 [key2] timeout 移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
BRPOPLPUSH source destination timeout 從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
LINDEX key index 通過索引獲取列表中的元素
LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者後插入元素
LLEN key 獲取列表長度
LPOP key 移出並獲取列表的第一個元素
LPUSH key value1 [value2] 將一個或多個值插入到列表頭部
LPUSHX key value 將一個值插入到已存在的列表頭部
LRANGE key start stop 獲取列表指定範圍內的元素
LREM key count value 移除列表元素
LSET key index value 通過索引設置列表元素的值
LTRIM key start stop 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
RPOP key 移除列表的最後一個元素,返回值為移除的元素。
RPOPLPUSH source destination 移除列表的最後一個元素,並將該元素添加到另一個列表並返回
RPUSH key value1 [value2] 在列表中添加一個或多個值到列表尾部
RPUSHX key value 為已存在的列表添加值
  • 思考:使用List類型模擬 棧 / 隊列 / 阻塞隊列

根據上面的命令,我們就可以使用List類型模擬棧、隊列、阻塞隊列:

  1. 模擬棧:只需要入口和出口在同一邊

  2. 模擬隊列:入口和出口在不同邊

  3. 模擬阻塞隊列:入口和出口在不同邊,出隊時採用 BLPOP 或 BRPOP

6.Set類型

Redis 的 Set 是 string 類型的無序集合。集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是 O(1)

註意:如果在無序集合中的同一個元素被添加了兩次,根據集合內元素的唯一性,第二次插入的元素將被忽略。集合中最大的成員數為 2^32 - 1(4294967295, 每個集合可存儲40多億個成員)。

Redis 的 Set 結構與 Java 中的 HashSet 類似,可以看做是一個 value為 null 的 HashMap。因為也是一個哈希表,因此具備與 HashSet 類似的特征:

  • 無序
  • 元素不可重覆
  • 查找快
  • 支持交集、並集、差集等功能

下表列出了 Redis 集合基本命令:

序號 命令及描述
1 SADD key member1 [member2] 向集合添加一個或多個成員
2 SCARD key 獲取集合的成員數
3 SDIFF key1 [key2] 返回第一個集合與其他集合之間的差異。
4 SDIFFSTORE destination key1 [key2] 返回給定所有集合的差集並存儲在 destination 中
5 SINTER key1 [key2] 返回給定所有集合的交集
6 SINTERSTORE destination key1 [key2] 返回給定所有集合的交集並存儲在 destination 中
7 SISMEMBER key member 判斷 member 元素是否是集合 key 的成員
8 SMEMBERS key 返回集合中的所有成員
9 SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合
10 SPOP key 移除並返回集合中的一個隨機元素
11 SRANDMEMBER key [count] 返回集合中一個或多個隨機數
12 SREM key member1 [member2] 移除集合中一個或多個成員
13 SUNION key1 [key2] 返回所有給定集合的並集
14 SUNIONSTORE destination key1 [key2] 所有給定集合的並集存儲在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

Set命令練習:

  1. 將下列數據用redis的set集合來存儲:

    • 張三的好友有:李四,王五,趙六
    • 李四的好友有:王五,麻子,二狗
    127.0.0.1:6379> sadd zs ls wu zl
    (integer) 3
    127.0.0.1:6379> sadd ls wu mz eg
    (integer) 3
    
  2. 利用Set命令來實現下列功能:

    • 計算張三的好友有多少人

      127.0.0.1:6379> SCARD zs
      (integer) 3
      
    • 計算張三和李四有哪些共同好友

      127.0.0.1:6379> SINTER zs ls #交集
      1) "wu"
      
    • 查詢哪些人是張三的好友卻不是李四的好友

      127.0.0.1:6379> SDIFF zs ls #差集
      1) "zl"
      2) "ls"
      
    • 查詢張三和李四的好友總共有哪些人

      127.0.0.1:6379> SUNION zs ls #並集
      1) "wu"
      2) "zl"
      3) "eg"
      4) "ls"
      5) "mz"
      
    • 判斷李四是否是張三的好友

      127.0.0.1:6379> SISMEMBER zs ls
      (integer) 1
      
    • 判斷張三是否是李四的好友

      127.0.0.1:6379> SISMEMBER ls zs
      (integer) 0
      
    • 將李四從張三的好友列表中刪除

      127.0.0.1:6379> SREM zs ls
      (integer) 1
      

7.zset(SortedSet)類型

Redis 的 Sorted Set 是一個可排序的 Set集合,與 Java 中的 TreeSet 有些類似,但底層數據結構卻差別很大。SortedSet 中的每一個元素都帶有一個 score 屬性(double類型),redis正是通過score來為集合中的成員進行從小到大的排序,底層的實現是一個跳錶(SkipList)加哈希表。zset的成員是唯一的,但分數(score)卻可以重覆。

集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是 O(1)。

SortedSet具備下列特性:

  • 可排序
  • 元素不重覆
  • 查詢速度快

SortedSet常用於實現排行榜或者帶權重的消息隊列這樣的功能。

下表列出了 redis 有序集合的基本命令:

註意:所有排名預設是升序,如果要降序則在命令的Z後面添加REV即可

序號 命令及描述
1 ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的分數
2 ZCARD key 獲取有序集合的成員數
3 ZCOUNT key min max 計算在有序集合中指定區間分數的成員數
4 ZINCRBY key increment member 有序集合中對指定成員的分數加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 destination 中
6 ZLEXCOUNT key min max 在有序集合中計算指定字典區間內成員數量
7 ZRANGE key start stop [WITHSCORES] 通過索引區間返回有序集合指定區間內的成員
8 ZRANGEBYLEX key min max [LIMIT offset count] 通過字典區間返回有序集合的成員
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通過分數返回有序集合指定區間內的成員
10 ZRANK key member 返回有序集合中指定成員的索引
11 ZREM key member [member ...] 移除有序集合中的一個或多個成員
12 ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區間的所有成員
13 ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區間的所有成員
14 ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的所有成員
15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定區間內的成員,通過索引,分數從高到低
16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分數區間內的成員,分數從高到低排序
17 ZREVRANK key member 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序
18 ZSCORE key member 返回有序集中,成員的分數值
19 ZUNIONSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的並集,並存儲在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成員和元素分值)

SortedSet命令練習:

將班級的下列學生得分存入Redis的SortedSet中:

Jack 85,Lucy 89,Rose 82,Tom 95,Jerry 78,Amy 92,Miles 76

127.0.0.1:6379> ZADD student 85 jack 89 lucy 82 rose 95 tom 78 jerry 92 amy 76 miles
(integer) 7

並實現如下功能:

  1. 刪除Tom

    127.0.0.1:6379> ZREM student tom
    (integer) 1
    
  2. 獲取Amy的分數

    127.0.0.1:6379> ZSCORE student amy
    "92"
    
  3. 獲取Rose的排名

    127.0.0.1:6379> ZREVRANK student rose
    (integer) 3 #降序,從0開始,實際排名為4
    
  4. 查詢80分以下有幾個學生

    127.0.0.1:6379> ZCOUNT student 0 80
    (integer) 2
    
  5. 給Amy加2分

    127.0.0.1:6379> ZINCRBY student 2 amy
    "94"
    
  6. 查詢成績前3名的同學

    127.0.0.1:6379> ZREVRANGE student 0 2
    1) "amy"
    2) "lucy"
    3) "jack"
    
  7. 查出80分以下的所有學生

    127.0.0.1:6379> ZREVRANGEBYSCORE student 80 0
    1) "jerry"
    2) "miles"
    

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

-Advertisement-
Play Games
更多相關文章
  • theme: channing-cyan *以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「ENG八戒」https://mp.weixin.qq.com/s/RIztusI3uKRnoHVf0sloeg 開發者雖然主要負責工程里的開發任務,但是每個開發完畢的功能都是需要開發者自測通 ...
  • 本片主要是對人工智慧領域下的一些頂會進行梳理,對頂會進行瞭解,以後會對瞭解到的頂會做一個梳理,拓寬自己對頂刊頂會的認知。 如果大家有什麼新的想法,非常歡迎大家一起探討和討論。目前只是對這些頂級會議做一個簡單的說明,後續瞭解深入後,還會繼續不斷更新這部分內容。 一.CV中的頂級會議 CV中目前工人的三 ...
  • 因為從2021 年11 月1 日起,用戶無法從中國大陸地區使用Yahoo 產品與服務 所以下麵兩個錯誤,都是代理配置的問題 error:No timezone found, symbol may be delisted error:No data found for this date range, ...
  • 為了實現面向對象程式設計(OOP)的封裝這個特性,需要程式設計語言提供一定的語法機制來支持。這個語法機制就是訪問許可權控制(訪問修飾符:public、protected、private、default)。 ...
  • .NET 實現 JWT 登錄驗證 在現代 Web 應用程式中,身份驗證和授權是必不可少的功能。JSON Web Token (JWT) 是一種廣泛使用的身份驗證和授權機制,它可以用於安全地傳輸用戶信息和授權數據。在本篇博文中,我們將學習如何在 C# .NET 中實現 JWT 登錄驗證,並處理用戶信息 ...
  • 最近由於項目需要,需要給每個用戶分配一個充幣地址,考慮到錢包安全性和方便管理,於是自己動手寫了一個本地網頁版的錢包,附上源代碼跟大家交流下。 Github 源代碼地址 錢包和項目是分離的,項目通過鑒權訪問錢包的介面,主要實現了以下功能: 1、可以導入助記詞、私鑰,也可以隨機生成臨時私鑰; 2、一套助 ...
  • 包 CommunityToolkit.Mvvm (又名 MVVM 工具包,以前名為 Microsoft.Toolkit.Mvvm) 是一個現代、快速且模塊化的 MVVM 庫。 它是 .NET 社區工具包的一部分,圍繞以下原則構建: 平臺和運行時獨立 - .NET Standard 2.0、 .NET ...
  • 作者:盧文雙 資深資料庫內核研發 去年年底通過微信公眾號【資料庫內核】設定了一個目標——2023 年要寫一系列 特性介紹+內核解析 的文章(現階段還是以 MySQL 為主)。 雖然關註者很少,但本著“說到就要做到”的原則,從這篇就開始了。 序言: 以前對 MySQL 測試框架 MTR 的使用,主要集 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...