Linux、Windows下Redis的安裝即Redis的基本使用詳解

来源:https://www.cnblogs.com/wren/archive/2022/09/27/16733098.html
-Advertisement-
Play Games

前言 什麼是Redis Redis是一個基於記憶體的key-value結構資料庫。Redis 是互聯網技術領域使用最為廣泛的存儲中間件,它是「Remote Dictionary Service」的首字母縮寫,也就是「遠程字典服務」。 [ ] 基於記憶體存儲,讀寫性能高 [ ] 適合存儲熱點數據(熱點商品 ...



前言


什麼是Redis


Redis是一個基於記憶體的key-value結構資料庫。Redis 是互聯網技術領域使用最為廣泛的存儲中間件,它是「Remote Dictionary Service」的首字母縮寫,也就是「遠程字典服務」。


在這裡插入圖片描述



在這裡插入圖片描述



在這裡插入圖片描述


使用Redis能做什麼


  • 數據緩存

  • 消息隊列

  • 註冊中心

  • 發佈訂閱


Redis入門


Redis簡介


Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. 翻譯為:Redis是一個開源的記憶體中的數據結構存儲系統,它可以用作:資料庫、緩存和消息中間件。


官網:https://redis.io


Redis是用C語言開發的一個開源的高性能鍵值對(key-value)資料庫,官方提供的數據是可以達到100000+的QPS(每秒內查詢次數)。它存儲的value類型比較豐富,也被稱為結構化的NoSql資料庫。

NoSql(Not Only SQL),不僅僅是SQL,泛指非關係型資料庫。NoSql資料庫並不是要取代關係型資料庫,而是關係型資料庫的補充。


關係型資料庫(RDBMS):

  • Mysql

  • Oracle

  • DB2

  • SQLServer


非關係型資料庫(NoSql):

  • Redis

  • Mongo db

  • MemCached


Redis下載與安裝


Redis下載

Redis安裝包分為windows版和Linux版:

下載後得到下麵安裝包:


在這裡插入圖片描述


Redis安裝

1)在Linux中安裝Redis

在Linux系統安裝Redis步驟:

  1. 將Redis安裝包上傳到Linux

  2. 解壓安裝包,命令:tar -zxvf redis-4.0.0.tar.gz -C /usr/local

  3. 安裝Redis的依賴環境gcc,命令:yum install gcc-c++

  4. 進入/usr/local/redis-4.0.0,進行編譯,命令:make

  5. 進入redis的src目錄進行安裝,命令:make install

安裝後重點文件說明:


/usr/local/redis-4.0.0/src/redis-server:Redis服務啟動腳本

/usr/local/redis-4.0.0/src/redis-cli:Redis客戶端腳本

/usr/local/redis-4.0.0/redis.conf:Redis配置文件


2)在Windows中安裝Redis

Redis的Windows版屬於綠色軟體,直接解壓即可使用,解壓後目錄結構如下:


在這裡插入圖片描述


Redis服務啟動與停止


1)Linux系統中啟動和停止Redis

執行Redis服務啟動腳本文件redis-server


在這裡插入圖片描述


通過啟動日誌可以看到,Redis預設埠號為6379

Ctrl + C停止Redis服務

通過redis-cli可以連接到本地的Redis服務,預設情況下不需要認證即可連接成功。

退出客戶端可以輸入exit或者quit命令。


2)Windows系統中啟動和停止Redis

Windows系統中啟動Redis,直接雙擊redis-server.exe即可啟動Redis服務,redis服務預設埠號為6379


在這裡插入圖片描述


Ctrl + C停止Redis服務

雙擊redis-cli.exe即可啟動Redis客戶端,預設連接的是本地的Redis服務,而且不需要認證即可連接成功。


在這裡插入圖片描述


退出客戶端可以輸入exit或者quit命令。


Redis配置文件

前面我們已經啟動了Redis服務,預設情況下Redis啟動後是在前臺運行,而且客戶端不需要密碼就可以連接到Redis服務。如果我們希望Redis服務啟動後是在後臺運行,同時希望客戶端認證通過後才能連接到Redis服務,應該如果做呢?


此時就需要修改Redis的配置文件:

  • Linux系統中Redis配置文件:REDIS_HOME/redis.conf

  • Windows系統中Redis配置文件:REDIS_HOME/redis.windows.conf


通過修改Redis配置文件可以進行如下配置:

1) 設置Redis服務後臺運行

將配置文件中的daemonize配置項改為yes,預設值為no。

註意:Windows版的Redis不支持後臺運行。


2) 設置Redis服務密碼

將配置文件中的 # requirepass foobared 配置項取消註釋,預設為註釋狀態。foobared為密碼,可以根據情況自己指定。


3) 設置允許客戶端遠程連接Redis服務

Redis服務預設只能客戶端本地連接,不允許客戶端遠程連接。將配置文件中的 bind 127.0.0.1 配置項註釋掉。


解釋說明:

Redis配置文件中 # 表示註釋

Redis配置文件中的配置項前面不能有空格,需要頂格寫

daemonize:用來指定redis是否要用守護線程的方式啟動,設置成yes時,代表開啟守護進程模式。在該模式下,redis會在後臺運行

requirepass:設置Redis的連接密碼

bind:如果指定了bind,則說明只允許來自指定網卡的Redis請求。如果沒有指定,就說明可以接受來自任意一個網卡的Redis請求。


註意:修改配置文件後需要重啟Redis服務配置才能生效,並且啟動Redis服務時需要顯示的指定配置文件:


1)Linux中啟動Redis服務

# 進入Redis安裝目錄
cd /usr/local/redis-4.0.0
# 啟動Redis服務,指定使用的配置文件
./src/redis-server ./redis.conf

2)Windows中啟動Redis服務


在這裡插入圖片描述


由於Redis配置文件中開啟了認證校驗,即客戶端連接時需要提供密碼,此時客戶端連接方式變為:


在這裡插入圖片描述


解釋說明:

-h:指定連接的Redis服務的ip地址

-p:指定連接的Redis服務的埠號

-a:指定連接的Redis服務的密碼


Redis數據類型


Redis存儲的是key-value結構的數據,其中key是字元串類型,value有5種常用的數據類型:

  • 字元串 string

  • 哈希 hash

  • 列表 list

  • 集合 set

  • 有序集合 sorted set / zset


Redis 5種常用數據類型


在這裡插入圖片描述


解釋說明:

字元串(string):普通字元串,常用

哈希(hash):適合存儲對象

列表(list):按照插入順序排序,可以有重覆元素

集合(set):無序集合,沒有重覆元素

有序集合(sorted set / zset):集合中每個元素關聯一個分數(score),根據分數升序排序,沒有重覆元素


Redis常用命令


字元串string操作命令


Redis 中字元串類型常用命令:

  • SET key value 設置指定key的值

  • GET key 獲取指定key的值

  • SETEX key seconds value 設置指定key的值,並將 key 的過期時間設為 seconds 秒

  • SETNX key value 只有在 key 不存在時設置 key 的值

更多命令可以參考Redis中文網:https://www.redis.net.cn


哈希hash操作命令


Redis hash 是一個string類型的 field 和 value 的映射表,hash特別適合用於存儲對象,常用命令:

  • HSET key field value 將哈希表 key 中的欄位 field 的值設為 value

  • HGET key field 獲取存儲在哈希表中指定欄位的值

  • HDEL key field 刪除存儲在哈希表中的指定欄位

  • HKEYS key 獲取哈希表中所有欄位

  • HVALS key 獲取哈希表中所有值

  • HGETALL key 獲取在哈希表中指定 key 的所有欄位和值


在這裡插入圖片描述


列表list操作命令


Redis 列表是簡單的字元串列表,按照插入順序排序,常用命令:

  • LPUSH key value1 [value2] 將一個或多個值插入到列表頭部

  • LRANGE key start stop 獲取列表指定範圍內的元素

  • RPOP key 移除並獲取列表最後一個元素

  • LLEN key 獲取列表長度

  • BRPOP key1 [key2 ] timeout 移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超 時或發現可彈出元素為止


在這裡插入圖片描述


集合set操作命令


Redis set 是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重覆的數據,常用命令:

  • SADD key member1 [member2] 向集合添加一個或多個成員

  • SMEMBERS key 返回集合中的所有成員

  • SCARD key 獲取集合的成員數

  • SINTER key1 [key2] 返回給定所有集合的交集

  • SUNION key1 [key2] 返回所有給定集合的並集

  • SDIFF key1 [key2] 返回給定所有集合的差集

  • SREM key member1 [member2] 移除集合中一個或多個成員


在這裡插入圖片描述


有序集合sorted set操作命令


Redis sorted set 有序集合是 string 類型元素的集合,且不允許重覆的成員。每個元素都會關聯一個double類型的分數(score) 。redis正是通過分數來為集合中的成員進行從小到大排序。有序集合的成員是唯一的,但分數卻可以重覆。


常用命令:

  • ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的 分數

  • ZRANGE key start stop [WITHSCORES] 通過索引區間返回有序集合中指定區間內的成員

  • ZINCRBY key increment member 有序集合中對指定成員的分數加上增量 increment

  • ZREM key member [member ...] 移除有序集合中的一個或多個成員


在這裡插入圖片描述


通用命令

Redis中的通用命令,主要是針對key進行操作的相關命令:

  • KEYS pattern 查找所有符合給定模式( pattern)的 key

  • EXISTS key 檢查給定 key 是否存在

  • TYPE key 返回 key 所儲存的值的類型

  • TTL key 返回給定 key 的剩餘生存時間(TTL, time to live),以秒為單位

  • DEL key 該命令用於在 key 存在是刪除 key


在Java中操作Redis


前面我們講解了Redis的常用命令,這些命令是我們操作Redis的基礎,那麼我們在java程式中應該如何操作Redis呢?這就需要使用Redis的Java客戶端,就如同我們使用JDBC操作MySQL資料庫一樣。


Redis 的 Java 客戶端很多,官方推薦的有三種:

  • Jedis

  • Lettuce

  • Redisson

Spring 對 Redis 客戶端進行了整合,提供了 Spring Data Redis,在Spring Boot項目中還提供了對應的Starter,即 spring-boot-starter-data-redis。


Jedis


Jedis 是 Redis 的 Java 版本的客戶端實現。

maven坐標:

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.8.0</version>
</dependency>

使用 Jedis 操作 Redis 的步驟:

  1. 獲取連接

  2. 執行操作

  3. 關閉連接


示例代碼:

package com.execise.test;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Set;

/**
 * 使用Jedis操作Redis
 */
public class JedisTest {

    @Test
    public void testRedis(){
        //1 獲取連接
        Jedis jedis = new Jedis("localhost",6379);
        
        //2 執行具體的操作
        jedis.set("username","xiaoming");

        String value = jedis.get("username");
        System.out.println(value);

        //jedis.del("username");

        jedis.hset("myhash","addr","bj");
        String hValue = jedis.hget("myhash", "addr");
        System.out.println(hValue);

        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //3 關閉連接
        jedis.close();
    }
}

Spring Data Redis


Spring Data Redis 是 Spring 的一部分,提供了在 Spring 應用中通過簡單的配置就可以訪問 Redis 服務,對 Redis 底層開發包進行了高度封裝。在 Spring 項目中,可以使用Spring Data Redis來簡化 Redis 操作。


網址:https://spring.io/projects/spring-data-redis


在這裡插入圖片描述


maven坐標:

<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
	<version>2.4.8</version>
</dependency>

Spring Boot提供了對應的Starter,maven坐標:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring Data Redis中提供了一個高度封裝的類:RedisTemplate,針對 Jedis 客戶端中大量api進行了歸類封裝,將同一類型操作封裝為operation介面,具體分類如下:

  • ValueOperations:簡單K-V操作

  • SetOperations:set類型數據操作

  • ZSetOperations:zset類型數據操作

  • HashOperations:針對hash類型的數據操作

  • ListOperations:針對list類型的數據操作


使用方式


環境搭建

第一步:創建maven項目springdataredis_demo,配置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/>
    </parent>
    <groupId>com.execise</groupId>
    <artifactId>springdataredis_demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.5</version>
            </plugin>
        </plugins>
    </build>
</project>

第二步:編寫啟動類

package com.execise;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }

}

第三步:配置application.yml

spring:
  application:
    name: springdataredis_demo
  #Redis相關配置
  redis:
    host: localhost
    port: 6379
    #password: 123456
    database: 0 #操作的是0號資料庫
    jedis:
      #Redis連接池配置
      pool:
        max-active: 8 #最大連接數
        max-wait: 1ms #連接池最大阻塞等待時間
        max-idle: 4 #連接池中的最大空閑連接
        min-idle: 0 #連接池中的最小空閑連接

解釋說明:

spring.redis.database:指定使用Redis的哪個資料庫,Redis服務啟動後預設有16個資料庫,編號分別是從0到15。

可以通過修改Redis配置文件來指定資料庫的數量。


第四步:提供配置類

package com.execise.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
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.StringRedisSerializer;

/**
 * Redis配置類
 */
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //預設的Key序列化器為:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }
}

解釋說明:

當前配置類不是必須的,因為 Spring Boot 框架會自動裝配 RedisTemplate 對象,但是預設的key序列化器為JdkSerializationRedisSerializer,導致我們存到Redis中後的數據和原始數據有差別


第五步:提供測試類

package com.execise.test;

import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    
}

操作字元串類型數據

/**
 * 操作String類型數據
*/
@Test
public void testString(){
    //存值
    redisTemplate.opsForValue().set("city123","beijing");

    //取值
    String value = (String) redisTemplate.opsForValue().get("city123");
    System.out.println(value);

    //存值,同時設置過期時間
    redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

    //存值,如果存在則不執行任何操作
    Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
    System.out.println(aBoolean);
}

操作哈希類型數據

/**
 * 操作Hash類型數據
*/
@Test
public void testHash(){
    HashOperations hashOperations = redisTemplate.opsForHash();

    //存值
    hashOperations.put("002","name","xiaoming");
    hashOperations.put("002","age","20");
    hashOperations.put("002","address","bj");

    //取值
    String age = (String) hashOperations.get("002", "age");
    System.out.println(age);

    //獲得hash結構中的所有欄位
    Set keys = hashOperations.keys("002");
    for (Object key : keys) {
        System.out.println(key);
    }

    //獲得hash結構中的所有值
    List values = hashOperations.values("002");
    for (Object value : values) {
        System.out.println(value);
    }
}

操作列表類型數據

/**
 * 操作List類型的數據
*/
@Test
public void testList(){
    ListOperations listOperations = redisTemplate.opsForList();

    //存值
    listOperations.leftPush("mylist","a");
    listOperations.leftPushAll("mylist","b","c","d");

    //取值
    List<String> mylist = listOperations.range("mylist", 0, -1);
    for (String value : mylist) {
        System.out.println(value);
    }

    //獲得列表長度 llen
    Long size = listOperations.size("mylist");
    int lSize = size.intValue();
    for (int i = 0; i < lSize; i++) {
        //出隊列
        String element = (String) listOperations.rightPop("mylist");
        System.out.println(element);
    }
}

操作集合類型數據

/**
 * 操作Set類型的數據
*/
@Test
public void testSet(){
    SetOperations setOperations = redisTemplate.opsForSet();

    //存值
    setOperations.add("myset","a","b","c","a");

    //取值
    Set<String> myset = setOperations.members("myset");
    for (String o : myset) {
        System.out.println(o);
    }

    //刪除成員
    setOperations.remove("myset","a","b");

    //取值
    myset = setOperations.members("myset");
    for (String o : myset) {
        System.out.println(o);
    }

}

操作有序集合類型數據

/**
 * 操作ZSet類型的數據
*/
@Test
public void testZset(){
    ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    //存值
    zSetOperations.add("myZset","a",10.0);
    zSetOperations.add("myZset","b",11.0);
    zSetOperations.add("myZset","c",12.0);
    zSetOperations.add("myZset","a",13.0);

    //取值
    Set<String> myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
        System.out.println(s);
    }

    //修改分數
    zSetOperations.incrementScore("myZset","b",20.0);

    //取值
    myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
        System.out.println(s);
    }

    //刪除成員
    zSetOperations.remove("myZset","a","b");

    //取值
    myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
        System.out.println(s);
    }
}

通用操作

/**
 * 通用操作,針對不同的數據類型都可以操作
*/
@Test
public void testCommon(){
    //獲取Redis中所有的key
    Set<String> keys = redisTemplate.keys("*");
    for (String key : keys) {
        System.out.println(key);
    }

    //判斷某個key是否存在
    Boolean uname = redisTemplate.hasKey("uname");
    System.out.println(uname);

    //刪除指定key
    redisTemplate.delete("myZset");

    //獲取指定key對應的value的數據類型
    DataType dataType = redisTemplate.type("myset");
    System.out.println(dataType.name());

}

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

-Advertisement-
Play Games
更多相關文章
  • 一、關機重啟命令 shutdown -h now 立刻進行關機 halt 關機 reboot 重啟電腦 sync 把記憶體數據同步到磁碟 ==關機重啟命令均需要root許可權執行== 二、用戶登錄和註銷命令 su username: 切換用戶,不帶任何參數會進入root;低許可權用戶切換高許可權用戶需要輸入 ...
  • 一、本地數據集上傳到到數據倉庫Hive 1、 實驗數據集的下載 1. 將user.zip下載到指定目錄 2.給hadoop用戶賦予針對bigdatacase目錄的各種操作許可權 3.創建一個dataset目錄用於保存數據集 4.解壓縮user.zip文件 5.可以看到dataset目錄下由兩個文件 6 ...
  • 超級跳躍日:Super Leap Day是一款非常有趣的橫版跑酷冒險游戲,游戲操作簡單,只需要按下單個按鈕即可連續跳躍,沿途還有很多獎勵和物品等待你來收集,並且每天都有新的關卡等你來挑戰,喜歡的朋友快來體驗吧~ 詳情:超級跳躍日Super Leap Day for mac(動作冒險游戲) 游戲介紹 ...
  • 如果轉載, 請註明出處 https://www.cnblogs.com/milton/p/16730512.html Ubuntu22.40下VNC和遠程桌面的區別 使用遠程桌面時, 用戶必須在host上登入桌面環境. 可以是鎖屏或非鎖屏, 但是必須要有一個用戶桌面會話存在. 使用VNC時, hos ...
  • 摘要:面向教育模式的轉變,南京功夫豆攜手華為雲IoT,給印表機配上與雲端互通的智能盒子,開啟雲端列印新模式 本文分享自華為雲社區《一臺“厲害”的印表機:雲+IoT,開啟雲端列印新模式》,作者:華為IoT雲服務 。 後疫情時代 生活的各方面都在往線上模式延展 而在不被人註意的角落裡 印表機也在悄悄地提 ...
  • 1. 前言 什麼是Linux Linux是一套免費使用和自由傳播的操作系統。說到操作系統,大家比較熟知的應該就是Windows和MacOS操作系統,我們今天所學習的Linux也是一款操作系統。 為什麼要學Linux 那麼我們為什麼要學習Linux呢,主要出於兩個方面的原因。 1). 企業用人要求 以 ...
  • cobbler部署 #先關閉防火牆和selinux [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# setenforce 0 //cobbler服務,selinux必須得是disabled狀態,所以要重啟 [ro ...
  • 前幾天裝了幾台伺服器測試,在使用的過程中發現,每次重啟系統,登錄界面會彈出網卡提示 “r8169 0000:02:00 eth0 Invalid ocp reg 17758!” 系統版本: 經過測試發現: 1、開機前將eth0/eth1網口插上網線,系統啟動後識別到eth0/eth1網口有網線連接, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...