redis常用知識彙總(包括 jedis 和 springboot 整合 redis)

来源:https://www.cnblogs.com/xxctx/p/18404557
-Advertisement-
Play Games

介紹 Redis 是一個開源的記憶體資料庫,它支持多種數據結構,並且常用於高速緩存、會話管理、消息隊列等場景。Redis 的全稱是 Remote Dictionary Server,是一種 key-value(鍵值對)存儲系統,能夠以極高的性能處理大量數據的讀寫操作。 Redis 的主要特點: 基於內 ...


介紹

Redis 是一個開源的記憶體資料庫,它支持多種數據結構,並且常用於高速緩存、會話管理、消息隊列等場景。Redis 的全稱是 Remote Dictionary Server,是一種 key-value(鍵值對)存儲系統,能夠以極高的性能處理大量數據的讀寫操作。

Redis 的主要特點:

  1. 基於記憶體:數據存儲在記憶體中,具有極高的讀寫速度,適用於實時數據處理和快速響應需求的應用。
  2. 支持持久化:雖然是記憶體資料庫,但 Redis 提供了將數據保存到磁碟的持久化功能,防止數據丟失。
  3. 豐富的數據結構
  4. 數據過期與自動刪除:Redis 支持為每個鍵設置過期時間,到期後自動刪除,常用於緩存系統。
  5. 發佈/訂閱機制:Redis 提供了消息隊列功能,可以讓客戶端訂閱和發佈消息。
  6. 事務支持:Redis 支持簡單的事務機制,允許多個命令作為一個原子操作執行。
  7. 高可用性與分散式:通過 Redis Cluster、Sentinel 機制支持高可用和自動故障轉移,能夠在分散式環境中使用。

1、Redis 基本配置

Redis 的配置文件通常命名為 redis.conf,存放在 Redis 安裝目錄中。通過修改該文件,可以自定義 Redis 的各種行為。

配置文件位置

  • 預設情況下,redis.conf 文件位於 Redis 安裝目錄中。您可以在啟動 Redis 時指定該文件的位置,例如:

    redis-server /path/to/redis.conf
    

關鍵配置選項

1. 埠號

  • port:指定 Redis 伺服器監聽的埠號。預設埠是 6379

    port 6379
    

2. 綁定地址

  • bind:指定 Redis 只在特定的網路介面上監聽。如果您希望 Redis 只接受來自本地的連接,可以將其設置為 127.0.0.1

    bind 127.0.0.1
    

3. 守護進程模式

  • daemonize:指定 Redis 是否以守護進程的方式運行。如果設置為 yes,Redis 將在後臺運行。預設值是 no

    daemonize yes
    

4. 密碼保護

  • requirepass:為 Redis 設置訪問密碼,只有提供正確密碼的客戶端才能連接到 Redis 伺服器。

    requirepass yourpassword
    

5. RDB 快照文件

  • dbfilename:指定 RDB 快照文件的名稱。預設文件名為 dump.rdb

    dbfilename dump.rdb
    
  • dir:指定 RDB 快照文件的存放目錄。

    dir /var/lib/redis/
    

啟動和使用 Redis 配置

  • 修改完 redis.conf 後,您可以通過以下命令啟動 Redis:

    redis-server /path/to/redis.conf
    
  • 可以通過以下命令檢查 Redis 是否正確載入了配置文件:

    redis-cli CONFIG GET *
    

    這會顯示當前 Redis 實例的所有配置選項及其值。
    通過這些基本配置,我們可以根據需要自定義 Redis 的行為,以適應不同的應用場景。

  • 使用 AUTH 命令進行身份驗證

    AUTH your_password
    

2、Redis 的通用命令

除了與數據結構相關的命令外,Redis 還提供了一些通用命令,用於管理 Redis 實例、數據操作和伺服器配置。

  • 鍵管理

    • DEL key:刪除鍵。
    • EXISTS key:檢查鍵是否存在。
    • EXPIRE key seconds:為鍵設置過期時間。
    • KEYS pattern:查找所有符合給定模式的鍵。
    • TTL key:查看鍵的剩餘生存時間。
    DEL mykey
    EXISTS mykey
    EXPIRE mykey 60
    KEYS *pattern*
    TTL mykey
    

3、Redis 的數據結構

Redis 是一個高性能的鍵值存儲系統,支持多種複雜的數據結構。這些數據結構使得 Redis 不僅可以作為簡單的緩存,還能滿足更多樣化的數據存儲需求。以下是 Redis 支持的主要數據結構:

字元串(String )

String 是 Redis 中最基本的數據類型,每個鍵對應一個字元串類型的值(value)。

常見命令
  1. SET:添加或修改一個鍵值對。例如 SET key value
  2. GET:根據鍵獲取對應的值。例如 GET key
  3. MSET:批量添加多個鍵值對。例如 MSET key1 value1 key2 value2
  4. MGET:根據多個鍵獲取多個值。例如 MGET key1 key2
  5. INCR:讓一個整型的鍵自增1。例如 INCR counter
  6. INCRBY:讓一個整型的鍵自增指定步長。例如 INCRBY counter 5
  7. INCRBYFLOAT:讓一個浮點數的鍵自增指定步長。例如 INCRBYFLOAT balance 0.5
  8. SETNX:添加一個鍵值對,前提是這個鍵不存在,否則不執行。例如 SETNX key value
  9. SETEX:添加一個帶有過期時間的鍵值對。例如 SETEX key 60 value(60秒後過期)。

哈希(Hash )

Hash 是 Redis 中的一種用於存儲鍵值對的集合。它類似於編程語言中的哈希表或字典。一個 Hash 里可以存儲多個欄位和值,因此非常適合存儲對象。

常見命令
  1. HSET:向 Hash 中添加一個欄位和值。例如 HSET key field value
  2. HGET:獲取 Hash 中某個欄位的值。例如 HGET key field
  3. HMSET:批量添加多個欄位和值。例如 HMSET key field1 value1 field2 value2
  4. HMGET:批量獲取多個欄位的值。例如 HMGET key field1 field2
  5. HGETALL:獲取 Hash 中所有的欄位和值。例如 HGETALL key
  6. HKEYS:獲取 Hash 中的所有欄位名。例如 HKEYS key
  7. HVALS:獲取 Hash 中的所有值。例如 HVALS key
  8. HINCRBY:讓 Hash 中某個欄位的值自增指定步長。例如 HINCRBY key field 2
  9. HSETNX:向 Hash 中添加一個欄位和值,前提是這個欄位不存在。例如 HSETNX key field value

列表(List)

列表是一個有序的字元串集合,可以在集合的頭部或尾部插入、刪除元素。適合用於實現消息隊列等功能。

常見命令
  1. LPUSH:在列表頭部插入一個元素。例如 LPUSH mylist "world"
  2. RPUSH:在列表尾部插入一個元素。例如 RPUSH mylist "hello"
  3. LPOP:移除並返回列表的第一個元素。例如 LPOP mylist
  4. RPOP:移除並返回列表的最後一個元素。例如 RPOP mylist
  5. LRANGE:獲取列表的一個子集。例如 LRANGE mylist 0 -1

集合(Set)

集合是無序的字元串集合,不允許重覆元素。適合用於存儲需要唯一性的集合,如標簽、用戶角色等。

常見命令
  1. SADD:向集合添加一個元素。例如 SADD myset "apple"
  2. SREM:移除集合中的一個元素。例如 SREM myset "apple"
  3. SCARD:返回集合中元素的個數。例如 SCARD myset
  4. SMEMBERS:獲取集合中的所有元素。例如 SMEMBERS myset
  5. SISMEMBER:判斷元素是否在集合中。例如 SISMEMBER myset "apple"

有序集合(Sorted Set)

有序集合類似於集合,但每個元素都會關聯一個分數,元素按分數進行排序。適合用於排名、評分系統等場景。

常見命令
  1. ZADD:向有序集合添加一個元素,並設置分數。例如 ZADD leaderboard 100 "player1"
  2. ZRANGE:按索引範圍獲取有序集合中的元素,可以選擇同時返回分數。例如 ZRANGE leaderboard 0 -1 WITHSCORES
  3. ZSCORE:獲取有序集合中指定元素的分數。例如 ZSCORE leaderboard "player1"
  4. ZREM:移除有序集合中的一個元素。例如 ZREM leaderboard "player1"

Jedis 是一個用於與 Redis 資料庫交互的 Java 客戶端庫。通過 Jedis,你可以在 Java 應用程式中執行各種 Redis 操作,如增刪改查等。Jedis 提供了一組簡單易用的 API,使開發者可以輕鬆地將 Redis 集成到他們的 Java 應用程式中。

" : "的作用

在 Redis 中,冒號 (:) 用於創建鍵名的層級結構,以幫助組織和管理數據。例如,user:1000:name 表示用戶 ID 為 1000 的名字,order:5000:status 表示訂單 ID 為 5000 的狀態。使用冒號可以讓數據看起來像路徑一樣分層,便於分類和查詢。

假設你在存儲用戶信息和訂單信息:

  • user:1000:name -> "Alice"(用戶 ID 為 1000 的名字)
  • user:1000:email -> "[email protected]"(用戶 ID 為 1000 的電子郵件)
  • order:2000:status -> "shipped"(訂單 ID 為 2000 的狀態)

這裡,user:order: 是首碼,用於區分不同類型的數據,而冒號 : 用於分隔不同的層級。

4、jedis

Jedis 是一個用於與 Redis 資料庫交互的 Java 客戶端庫。通過 Jedis,你可以在 Java 應用程式中執行各種 Redis 操作,如增刪改查等。Jedis 提供了一組簡單易用的 API,使開發者可以輕鬆地將 Redis 集成到他們的 Java 應用程式中。

Jedis 的基本用法

  1. 引入依賴
    Maven 官網獲取 Jedis 依賴,並添加到 pom.xml 中:
    在這裡插入圖片描述

  2. 連接 Redis
    使用 Jedis 連接 Redis 非常簡單。以下是一個基本的連接示例:

    import redis.clients.jedis.Jedis;
    
    public class RedisExample {
        public static void main(String[] args) {
            // 創建一個 Jedis 對象,並指定 Redis 伺服器的地址和埠
            Jedis jedis = new Jedis("localhost", 6379);
            // 輸入密碼,如果沒有修改配置文件修改密碼的話,不用寫這個
            jedis.auth(“123456”);
            // 設置 Redis 字元串數據
            jedis.set("mykey", "Hello, Redis!");
            // 獲取並列印 Redis 字元串數據
            System.out.println("Redis 存儲的字元串: " + jedis.get("mykey"));
            // 關閉 Jedis 連接
            jedis.close();
        }
    }
    
  3. 常見操作
    Jedis 支持 Redis 的所有基本數據結構和操作。(上面 3、Redis 的數據結構 中的命令 jedis 都有對應的方法)

    • 字元串(String)jedis.set(key, value)jedis.get(key)
    • 哈希(Hash)jedis.hset(key, field, value)jedis.hget(key, field)
    • 列表(List)jedis.lpush(key, value)jedis.lrange(key, start, end)
    • 集合(Set)jedis.sadd(key, member)jedis.smembers(key)
    • 有序集合(Sorted Set)jedis.zadd(key, score, member)jedis.zrange(key, start, end)
  4. 連接池

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisConnectionFactory {
    private static final JedisPool jedisPool;

    static {
        // 配置連接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);         // 最大連接數
        poolConfig.setMaxIdle(8);          // 最大空閑連接數
        poolConfig.setMinIdle(0);          // 最小空閑連接數
        poolConfig.setMaxWaitMillis(1000); // 最大等待時間

        // 創建連接池對象
        jedisPool = new JedisPool(poolConfig, 
                                  "127.0.0.1", // Redis 主機地址
                                  6379,              // Redis 埠號
                                  1000,              // 超時時間
                                  "yourPassword");         // Redis 密碼
    }

    public static Jedis getJedis() {	// 通過這個方法在pool中獲取jedis
        return jedisPool.getResource();
    }
}

參數說明:

  • config: JedisPoolConfig 配置對象,用於配置連接池參數。
  • redisHost: Redis 伺服器的主機地址。
  • redisPort: Redis 伺服器的埠號。
  • 2000: 連接超時時間,單位為毫秒。
  • redisPassword: Redis 伺服器的密碼。

5、SpringDataRedis

Spring Data Redis 是 Spring Data 生態系統中的一個模塊,提供與 Redis 的簡便集成。Redis 是一個高性能的記憶體鍵值存儲,Spring Data Redis 通過提供簡單、一致和聲明式的方式,簡化了與 Redis 的交互,將低級別的 Redis 操作抽象為高級 API 和模板。

1、準備工作

添加依賴

  • spring data redis
    在這裡插入圖片描述
  • commons pool
    在這裡插入圖片描述

常見配置

  • application.yaml
spring:
  data:
    redis:
      # Redis 伺服器的主機地址
      host: localhost

      # Redis 伺服器的埠
      port: 6379

      # 配置 Redis 連接池(Lettuce 使用的連接池)
      lettuce:
        pool:
          # 連接池中最大活動連接數
          max-active: 8

          # 連接池中最大空閑連接數
          max-idle: 8

          # 連接池中最小空閑連接數
          min-idle: 0

          # 連接池中最大等待時間
          max-wait: 100ms

      # Redis 資料庫索引(預設為 0,Redis 預設提供 16 個資料庫)
      database: 0

      # Redis 伺服器的密碼,用於身份驗證
      password: yourpassword
  • 配置序列化器
    Spring Data Redis 中,序列化和反序列化是處理 Redis 數據的關鍵部分。序列化是將 Java 對象轉換為位元組流的過程,以便存儲到 Redis 中;反序列化則是將存儲在 Redis 中的位元組流轉換回 Java 對象的過程。Spring Data Redis 提供了多種序列化和反序列化策略,可以根據具體需求進行配置。

配置效果

  • : 被序列化成字元串(例如,"myKey")。
  • : 被序列化成 JSON 字元串(例如,{"name":"John","age":30})。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        // 創建RedisTemplate對象
        RedisTemplate<String, Object> template = new RedisTemplate<>();

        // 設置連接工廠
        template.setConnectionFactory(connectionFactory);

        // 使用 StringRedisSerializer 代替 GenericJackson2JsonRedisSerializer
        //  GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        // 設置key的序列化
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);

        template.setValueSerializer(genericJackson2JsonRedisSerializer);
        template.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        return template;
    }
}

2、對數據的操作

Spring Data Redis 提供了一組 API 用於操控 Redis 資料庫。以下是一些常用的 API 及其詳細說明:

1. 字元串操作 (String)

  • 設置值

    redisTemplate.opsForValue().set("key", "value");
    
  • 獲取值

    String value = (String) redisTemplate.opsForValue().get("key");
    
  • 設置值(帶過期時間)

    redisTemplate.opsForValue().set("key", "value", Duration.ofMinutes(10));
    
  • 刪除鍵

    redisTemplate.delete("key");
    

2. 哈希操作 (Hash)

  • 設置哈希欄位的值

    redisTemplate.opsForHash().put("user:1000", "name", "Alice");
    redisTemplate.opsForHash().put("user:1000", "email", "[email protected]");
    
  • 獲取哈希欄位的值

    String name = (String) redisTemplate.opsForHash().get("user:1000", "name");
    
  • 獲取哈希的所有欄位和值

    Map<Object, Object> userMap = redisTemplate.opsForHash().entries("user:1000");
    

3. 列表操作 (List)

  • 右側推入列表

    redisTemplate.opsForList().rightPush("list", "value1");
    redisTemplate.opsForList().rightPush("list", "value2");
    
  • 左側推入列表

    redisTemplate.opsForList().leftPush("list", "value0");
    
  • 獲取列表的所有元素

    List<Object> list = redisTemplate.opsForList().range("list", 0, -1);
    
  • 彈出列表的右側元素

    Object value = redisTemplate.opsForList().rightPop("list");
    

4. 集合操作 (Set)

  • 添加元素到集合

    redisTemplate.opsForSet().add("set", "value1", "value2");
    
  • 獲取集合的所有元素

    Set<Object> set = redisTemplate.opsForSet().members("set");
    
  • 移除集合的元素

    redisTemplate.opsForSet().remove("set", "value1");
    

5. 有序集合操作 (Sorted Set)

  • 添加元素到有序集合

    redisTemplate.opsForZSet().add("zset", "value1", 1);
    redisTemplate.opsForZSet().add("zset", "value2", 2);
    
  • 獲取有序集合的所有元素

    Set<Object> zset = redisTemplate.opsForZSet().range("zset", 0, -1);
    
  • 獲取有序集合的元素及其分數

    Set<ZSetOperations.TypedTuple<Object>> zsetWithScores = redisTemplate.opsForZSet().rangeWithScores("zset", 0, -1);
    

3、RedisTemplate 和 StringRedisTemplate

1. RedisTemplate

RedisTemplate 是一個泛型類,能夠處理不同類型的鍵和值。你可以指定鍵和值的序列化方式,以及 Redis 數據的類型(如 String, Object, Hash, List, Set, ZSet 等)。

主要特點:

  • 泛型支持: 它支持任意類型的鍵和值,不限於 String,可以是 ObjectInteger、自定義對象等。
  • 序列化方式靈活: 通過設置不同的序列化器,可以對鍵和值進行序列化和反序列化。

2. StringRedisTemplate

StringRedisTemplateRedisTemplate 的一種特化版本,它專門用於操作 String 類型的鍵和值。它預設使用 StringRedisSerializer 來對鍵和值進行序列化和反序列化,因此只處理 String 數據類型。

主要特點:

  • 簡化操作: 專註於 String 類型的數據操作,不需要額外配置序列化器,適用於鍵和值都為 String 類型的場景。
  • 預設序列化方式: 內置 StringRedisSerializer,預設將鍵和值都序列化為 String

3. 區別總結

特性 RedisTemplate StringRedisTemplate
支持的鍵和值類型 支持任何類型(如 String, Object, Integer 等) 只支持 String 類型的鍵和值
序列化方式 需要手動配置序列化器(可以選擇 JSON、JDK 序列化等) 預設使用 StringRedisSerializer,無需額外配置
適用場景 適用於複雜的數據類型,如 ObjectJSON 等。 適用於簡單的 String 類型數據操作。

示例1:

圖一是通過 RedisTemplate 存到 redis 中的 JSON 字元串,圖二是通過 StringRedisTemplate 存到redis 中的 JSON 字元串,由於 RedisTemplate 能夠實現 自動的反序列化,所以需要存儲多餘的 @class 信息,會造成記憶體的浪費。
在這裡插入圖片描述
在這裡插入圖片描述

示例2:

觀察下圖有 @Test 註解的代碼

// Uesr類
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    String name;
    Integer age;
}

// 測試
@Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
@Test
    void insertUser() {
        User user = new User("world", 1);

        redisTemplate.opsForValue().set("user:1", user);    // 自動將JAVA對象序列換成JSON格式的字元串
        User myuser = (User) redisTemplate.opsForValue().get("user:1"); // 自動反序列化,將JSON格式的字元串轉換成JAVA對象
        System.out.println("myuser = " + myuser);
    }

@Test
    void insertUser2() {
        User user = new User("world", 2);
        String jsonUser = JSON.toJSONString(user);  // 手動序列化成JSON格式的字元串

        stringRedisTemplate.opsForValue().set("user:1", jsonUser);
        String str = stringRedisTemplate.opsForValue().get("user:1");
        System.out.println("str = " + str);

        User myuser = JSON.parseObject(str, User.class);    // 手動從JSON格式的字元串轉換成JAVA對象
        System.out.println("myuser = " + myuser);
    }

下麵兩張圖分別是第一個Test和第二個Test輸出的結果
在這裡插入圖片描述

在這裡插入圖片描述
通過上面圖可以清楚的看到 RedisTemplate 會自動系列化JSON格式字元串和反序列化成JAVA對象,但是 StringRedisTemplate 都需要手動處理

6、補充

上面用到的JSON處理庫是 fastjson2, 可在 maven 官網 下載依賴
在這裡插入圖片描述

fastjson 常見用法

// 將 Java 對象序列化為 JSON 字元串
String jsonString = JSON.toJSONString(user);
        
// 將 JSON 字元串反序列化為 Java 對象
User deserializedUser = JSON.parseObject(jsonString, User.class);

// 創建一個 JSONObject
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "John");
// 轉換成JSON字元串
jsonObject.toString()

// 解析 JSON 字元串
String jsonString = "{\"name\":\"ld\",\"age\":18,\"city\":\"ShangHai\"}";
JSONObject parsedObject = JSONObject.parseObject(jsonString);
// 獲取value, 輸出 ld
System.out.println("Name: " + parsedObject.getString("name"));

暫且更到這裡 ... 後面再補


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

-Advertisement-
Play Games
更多相關文章
  • PLC Structured Text Object Oriented Programming PLC結構化文本(ST)——介面(Interface) 介面定義 介面定義了所有類繼承介面時應遵循的語法合同。介面定義了語法合同 "是什麼" 部分,派生類定義了語法合同 "怎麼做" 部分。 介面定義了屬性 ...
  • PLC Structured Text Object Oriented Programming PLC結構化文本(ST)——繼承(inheritance) 繼承的概念 繼承是面向對象程式設計中最重要的概念之一。繼承允許我們根據一個類來定義另一個類,這使得創建和維護應用程式變得更容易。同時也有利於重用 ...
  • PLC Structured Text Object Oriented Programming PLC結構化文本(ST)——屬性(Property) 屬性的定義 C# 中的屬性(Property)是類和結構體中用於封裝數據的成員。它們提供了一種方式來定義類成員的訪問和設置規則,通常用於隱藏欄位(Fi ...
  • 唬住了 50k ,唬不住就 5k 。這句話一直是 PHP 程式員之間相互吹捧、吹牛逼的笑點,每次面試過後都會撓撓頭上僅剩的幾根頭髮,回想自己是否吹牛逼會過了頭。 ...
  • 函數是 Python 中的一等公民,是一種可重用的代碼塊,用於封裝特定的邏輯;事件驅動框架是一種編程模式,它將程式的控制流轉移給外部事件,如用戶輸入、系統消息等,它事件驅動框架可以使用函數作為事件的處理邏輯。 ...
  • 9/9
    @目錄前言爬蟲步驟確定網址,發送請求獲取響應數據對響應數據進行解析保存數據完整源碼共勉博客 前言 本文寫了一個爬取視頻的案例,使用requests庫爬取了好看視頻的視頻,併進行保存到本地。後續也會更新selenium篇和DrissionPage篇。當然,爬取圖片肯定不止這三種方法,還有基於pytho ...
  • 雖然大多數公司還是用的JDK8但是也要去瞭解和學習一下新得東西 ## JDK8新特性(2014年初)(LTS版本) 1、Lambda表達式 2、函數式編程 3、介面可以添加預設方法和靜態方法,也就是定義不需要實現類實現的方法 4、方法引用 5、重覆註解,同一個註解可以使用多次 6、引入Optiona ...
  • TCP/IP協議 簡介 首先TCP/IP協議不只是表示TCP協議和IP協議兩種協議,而是一個協議簇。協議簇是什麼並不難理解,就是字面意思,一個由多個協議組合而成的集合體,其中最有代表性的就是TCP和IP這兩個協議,除了這兩個還有我們熟知的FTP、UDP等協議。當然我們下麵主要介紹的還是這兩位主角TC ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...