Redis 基礎和高級用法入門

redis 是什么?? ? ??

Redis是一個遠程內存數據庫,它不僅性能強勁,而且還具有復制特性以及為解決問題而生的獨一無二的數據模型。Redis提供了5種不同類型的數據結構,各式各樣的問題都可以很自然地映射到這些數據結構上:Redis的數據結構致力于幫助用戶解決問題,而不會像其他數據庫那樣,要求用戶扭曲問題來適應數據庫。除此之外,通過復制、持久化(persistence)和客戶端分片(client-side sharding)等特性,用戶可以很方便地將Redis擴展成一個能夠包含數百GB數據、每秒處理上百萬次請求的系統。

redis 安裝

macos 上的安裝

brew install redis

ubuntu 上的安裝

sudo apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis

Redhat Centos上的安裝

sudo yum install redis
sudo systemctl enable redis
sudo systemctl start redis

連接到redis?

ninjamac@ip-192-168-1-2 ~ % redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 

Redis常用命令介紹

1. string 的用法

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello   //刪除后查詢結果為nil
(nil)

2. list 的用法

127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1 //根據范圍來查看
1) "item"
2) "item2"
3) "item"
127.0.0.1:6379> lpop list-key  //彈出一個元素
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"

3. 集合的用法

127.0.0.1:6379> sadd set-key item.  //當你將一個元素添加到集合,成功后會返回一個1
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key //查看集合中所有的元素
1) "item"
2) "item2"
127.0.0.1:6379> sismember set-key item4  //判斷某個元素是否在集合中,不在的話返回0,在的話返回1
(integer) 0
127.0.0.1:6379> sismember set-key item
(integer) 1
127.0.0.1:6379> srem set-key item2  //從集合中刪除某個元素
(integer) 1
127.0.0.1:6379> smembers set-key
1) "item"

4. 散列的用法

127.0.0.1:6379> hset hash-key sub-key1 value1.  //在嘗試添加鍵值到散列的時候會返回一個值
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key3 value1
(integer) 1
127.0.0.1:6379> hgetall hash-key   //列出散列中所有的鍵值對
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
5) "sub-key3"
6) "value1"
127.0.0.1:6379> hdel hash-key sub-key2   //從散列中刪除簡直對
(integer) 1
127.0.0.1:6379> hdel hash-key sub-key1
(integer) 1
127.0.0.1:6379> hgetall hash-key
1) "sub-key3"
2) "value1"

5. 有序集合的用法

127.0.0.1:6379> zadd zset-key 738 member1   //往集合添加一個鍵值對會返回一個值
(integer) 1
127.0.0.1:6379> zadd zset-key 900 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 900 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores //查詢集合里所有的鍵值對
1) "member1"
2) "738"
3) "member0"
4) "900"
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores //按照范圍查詢鍵值對
1) "member1"
2) "738"
127.0.0.1:6379> zrem zset-key member1。  //刪除鍵值對
(integer) 1
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "900"

6. 訂閱和發布

有一個客戶端訂閱了redisChat通道

127.0.0.1:6379> SUBSCRIBE redisChat
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"

另一個客戶端發布消息到redisChat通道:

127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
(integer) 1

訂閱該通道的客戶端可以接受該消息

127.0.0.1:6379> SUBSCRIBE redisChat
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"
3) "Redis is a great caching technique"

7. 事務的用法

redis 事務允許在一個步驟中執行一組命令。以下是事務的兩個屬性:

  • 事務中的所有命令都作為單個隔離操作按順序執行。Redis 事務執行過程中不可能處理其他客戶端發出的請求。
  • Redis 事務也是原子性的。原子性意味著要么處理所有命令,要么不處理任何命令。

Redis 事務由命令 MULTI 啟動,然后您需要傳遞一個應在事務中執行的命令列表,之后由 EXEC 命令執行整個事務。

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> SET tutorial redis
QUEUED
127.0.0.1:6379(TX)> GET turorial
QUEUED
127.0.0.1:6379(TX)> INCR visitors
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) (nil)
3) (integer) 1

8. redis - server

Redis 服務器命令主要用于管理 Redis 服務器。

示例
以下示例解釋了如何獲取服務器的所有統計信息。

127.0.0.1:6379> INFO
# Server
redis_version:7.2.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7f24f11dd7e42c58
redis_mode:standalone
os:Darwin 24.3.0 arm64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:kqueue
atomicvar_api:c11-builtin
gcc_version:4.2.1
process_id:7521
process_supervised:no
run_id:3128aefc390caa8d8b5900f48760227b60bab3b0
tcp_port:6379
server_time_usec:1745481054943667
uptime_in_seconds:14771
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:650590
executable:/Users/ninjamac/redis-server
config_file:
io_threads_active:0
listener0:name=tcp,bind=*,bind=-::*,port=6379# Clients
connected_clients:2
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:16
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
total_blocking_keys:0
total_blocking_keys_on_nokey:0# Memory
used_memory:1716192
used_memory_human:1.64M
used_memory_rss:1572864
used_memory_rss_human:1.50M
used_memory_peak:1833280
used_memory_peak_human:1.75M
used_memory_peak_perc:93.61%
used_memory_overhead:1102904
used_memory_startup:1098848
used_memory_dataset:613288
used_memory_dataset_perc:99.34%
allocator_allocated:1696496
allocator_active:1541120
allocator_resident:1541120
total_system_memory:8589934592
total_system_memory_human:8.00G
used_memory_lua:31744
used_memory_vm_eval:31744
used_memory_lua_human:31.00K
used_memory_scripts_eval:0
number_of_cached_scripts:0
number_of_functions:0
number_of_libraries:0
used_memory_vm_functions:32768
used_memory_vm_total:64512
used_memory_vm_total_human:63.00K
used_memory_functions:216
used_memory_scripts:216
used_memory_scripts_human:216B
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:0.91
allocator_frag_bytes:18446744073709396240
allocator_rss_ratio:1.00
allocator_rss_bytes:0
rss_overhead_ratio:1.02
rss_overhead_bytes:31744
mem_fragmentation_ratio:0.93
mem_fragmentation_bytes:-123632
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_total_replication_buffers:0
mem_clients_slaves:0
mem_clients_normal:3648
mem_cluster_links:0
mem_aof_buffer:0
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0# Persistence
loading:0
async_loading:0
current_cow_peak:0
current_cow_size:0
current_cow_size_age:0
current_fork_perc:0.00
current_save_keys_processed:0
current_save_keys_total:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1745480666
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_saves:2
rdb_last_cow_size:0
rdb_last_load_keys_expired:0
rdb_last_load_keys_loaded:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_rewrites:0
aof_rewrites_consecutive_failures:0
aof_last_write_status:ok
aof_last_cow_size:0
module_fork_in_progress:0
module_fork_last_cow_size:0# Stats
total_connections_received:3
total_commands_processed:47
instantaneous_ops_per_sec:0
total_net_input_bytes:1888
total_net_output_bytes:411128
total_net_repl_input_bytes:0
total_net_repl_output_bytes:0
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
instantaneous_input_repl_kbps:0.00
instantaneous_output_repl_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:408
evicted_keys:0
evicted_clients:0
total_eviction_exceeded_time:0
current_eviction_exceeded_time:0
keyspace_hits:13
keyspace_misses:3
pubsub_channels:0
pubsub_patterns:0
pubsubshard_channels:0
latest_fork_usec:472
total_forks:2
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
total_active_defrag_time:0
current_active_defrag_time:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:1
dump_payload_sanitizations:0
total_reads_processed:50
total_writes_processed:55
io_threaded_reads_processed:0
io_threaded_writes_processed:0
reply_buffer_shrinks:3
reply_buffer_expands:0
eventloop_cycles:145460
eventloop_duration_sum:15705009
eventloop_duration_cmd_sum:11215
instantaneous_eventloop_cycles_per_sec:9
instantaneous_eventloop_duration_usec:58
acl_access_denied_auth:0
acl_access_denied_cmd:0
acl_access_denied_key:0
acl_access_denied_channel:0# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:6824c9d2b58f349f1b5e416a534b7cf7e569958b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0# CPU
used_cpu_sys:10.848199
used_cpu_user:7.186347
used_cpu_sys_children:0.004874
used_cpu_user_children:0.000463# Modules# Errorstats
errorstat_ERR:count=1# Cluster
cluster_enabled:0# Keyspace
db0:keys=4,expires=0,avg_ttl=0

9. redis script

Redis 腳本用于使用 Lua 解釋器執行腳本。從 2.6.0 版本開始,它內置于 Redis 中。用于腳本編寫的命令是 EVAL 命令。

127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

10. redis 備份和安全

127.0.0.1:6379> CONFIG get requirepass  //默認redis 沒有設置密碼
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG set requirepass "tutorialspoint" //設置密碼
OK
127.0.0.1:6379> AUTH "tutorialspoint" //使用密碼認證
OK
127.0.0.1:6379> set key1 test
OK
127.0.0.1:6379> get key1
"test"
127.0.0.1:6379> save  //該命令將在Redis目錄創建dump.rdb.
OK

高級用法

通過java app 連接到redis server

前提條件:

使用maven 創建java project

ninjamac@ip-192-168-1-2 java % mvn archetype:generate -DgroupId=com.example -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /Users/ninjamac/java
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: myapp
[INFO] Parameter: packageName, Value: com.example
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/ninjamac/java/myapp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:15 min
[INFO] Finished at: 2025-04-24T17:34:22+08:00
[INFO] ------------------------------------------------------------------------

編輯pom.xml 文件

<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><groupId>com.example</groupId><artifactId>myapp</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>myapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.10.1</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>

編寫App.java?

package com.example;
import com.google.gson.Gson;
import redis.clients.jedis.Jedis;public class App {public static void main(String[] args) {// Connect to Redis server on localhostJedis jedis = new Jedis("localhost", 6379);System.out.println("Connection to server successful");// Set data in Redisjedis.set("tutorial-name", "Redis tutorial");// Get data from RedisSystem.out.println("Stored string in redis: " + jedis.get("tutorial-name"));}
}

運行mvn clean install編譯項目

mvn clean install

運行編譯后的jar 文件,該程序向redis server添加一個名為tutorial-name的鍵,值為Redis tutorial

ninjamac@ip-192-168-1-2 myapp % java -cp "target/myapp-1.0-SNAPSHOT.jar:/Users/ninjamac/.m2/repository/redis/clients/jedis/4.3.0/jedis-4.3.0.jar:/Users/ninjamac/.m2/repository/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" com.example.App
Connection to server successful
Stored string in redis: Redis tutorial

通過redis-cli來驗證:

127.0.0.1:6379> get tutorial-name"Redis tutorial"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77048.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77048.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77048.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常見數據庫關鍵字示例 SQL 及執行順序分析(帶詳細注釋)

示例 SQL 及執行順序分析&#xff08;帶詳細注釋&#xff09; 示例 1&#xff1a;基礎查詢&#xff08;含多表關聯、過濾、分組、排序&#xff09; SELECT -- 1. 選擇字段&#xff08;包含聚合函數和別名&#xff09;e.department, COUNT(e.employee_id) AS total_employees, …

設計模式--建造者模式詳解

建造者模式 建造者模式也屬于創建型模式&#xff0c;它提供了一種創建對象的最佳方式 定義&#xff1a;將一個復雜對象的構建和它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示&#xff08;假設有不同的建造者實現類&#xff0c;可以產生不同的產品&#xff09…

PCB 過孔銅厚的深入指南

***前言&#xff1a;在上一期的文章中介紹了PCB制造的工藝流程&#xff0c;但仍然想在過孔的銅厚和PCB的過孔厚徑比兩個方面再深入介紹。 PCB銅厚的定義 電路中銅的厚度以盎司(oz)**表示。那么&#xff0c;為什么用重量單位來表示厚度呢? 盎司(oz)的定義 將1盎司(28.35 克)的銅…

如何配置 Conda 使用鏡像源加速

如何配置 Conda 使用鏡像源加速 為了提高使用 Anaconda 或 Miniconda 時包管理的速度&#xff0c;特別是在國內網絡環境下&#xff0c;可以通過配置鏡像源來實現更快的下載。以下是詳細的步驟說明&#xff1a; 1. 安裝 Conda&#xff08;如果尚未安裝&#xff09; 如果你還沒…

【k8s】k8s是怎么實現自動擴縮的

Kubernetes 提供了多種自動擴縮容機制&#xff0c;主要包括 Pod 水平自動擴縮&#xff08;HPA&#xff09;、垂直 Pod 自動擴縮&#xff08;VPA&#xff09; 和 集群自動擴縮&#xff08;Cluster Autoscaler&#xff09;。以下是它們的實現原理和配置方法&#xff1a; 1. Pod …

Reflex 完全指南:用 Python 構建現代 Web 應用的終極體驗

“寫 Python&#xff0c;就能構建 Web 前端。”——這不再是夢想&#xff0c;而是由 Reflex 帶來的現實。 過去&#xff0c;構建一個現代 Web 應用意味著你要學會前端&#xff08;React/JS/HTML/CSS&#xff09; 后端&#xff08;Flask/Django&#xff09; API 交互&#xff08…

Vue實戰(08)解決 Vue 項目中路徑別名 `@` 在 IDE 中報錯無法識別的問題

一、引言 ? 在 Vue 項目開發過程中&#xff0c;路徑別名是一個非常實用的特性&#xff0c;它能夠幫助開發者簡化文件引用路徑&#xff0c;提高代碼的可讀性和可維護性。其中&#xff0c; 作為一個常見的路徑別名&#xff0c;通常被用來指向項目的 src 目錄。然而&#xff0c;…

5.學習筆記-SpringMVC(P61-P70)

SpringMVC-SSM整合-接口測試 (1)業務層接口使用junit接口做測試 (2)表現層用postman做接口測試 (3)事務處理— 1&#xff09;在SpringConfig.java&#xff0c;開啟注解&#xff0c;是事務驅動 2&#xff09;配置事務管理器&#xff08;因為事務管理器是要配置數據源對象&…

[論文閱讀]REPLUG: Retrieval-Augmented Black-Box Language Models

REPLUG: Retrieval-Augmented Black-Box Language Models REPLUG: Retrieval-Augmented Black-Box Language Models - ACL Anthology NAACL-HLT 2024 在這項工作中&#xff0c;我們介紹了RePlug&#xff08;Retrieve and Plug&#xff09;&#xff0c;這是一個新的檢索增強型…

Mysql的深度分頁查詢優化

一、深度分頁為什么慢&#xff1f; 當執行 SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 時&#xff1a; MySQL 會掃描前 1,000,010 行&#xff0c;丟棄前 100 萬行&#xff0c;僅返回 10 行。偏移量&#xff08;offset&#xff09;越大&#xff0c;掃描行數越多&…

最新扣子(Coze)案例教程:Excel數據生成統計圖表,自動清洗數據+轉換可視化圖表+零代碼,完全免費教程

大家好&#xff0c;我是斜杠君。 知識星球群有同學和我說每天的工作涉及很多數據表的重復操作&#xff0c;想學習Excel數據表通過大模型自動轉數據圖片的功能。 今天斜杠君就帶大家一起搭建一個智能體&#xff0c;以一個銷售行業數據為例&#xff0c;可以快速實現自動清洗Exc…

Uniapp 中緩存操作指南

在 Uniapp 中,你可以使用三種方式操作緩存:同步方法、異步方法和 Vuex 持久化存儲。以下是詳細的設置、獲取和清除緩存的方法: 1. 同步方法 設置緩存 uni.setStorageSync(key, value); // 示例 uni.setStorageSync(token, abc123); 獲取緩存 const value = uni.getStor…

k8s的yaml文件里的volume跟volumeMount的區別

volume 是 Pod 級別的資源&#xff0c;用于定義存儲卷。它是一個獨立于容器的存儲資源&#xff0c;可以被一個或多個容器共享使用。volume 的定義位于 Pod 的 spec.volumes 部分。 特點 獨立性&#xff1a;volume 是 Pod 的一部分&#xff0c;而不是容器的一部分。它獨立于容…

梅毒單陽能否通過國企體檢?

國企體檢通常會參照公務員體檢標準進行&#xff0c;梅毒檢測是其中的常規項目。 一、明確“梅毒單陽”的定義 檢測指標解析 TPPA陽性RPR陰性&#xff1a;可能為既往感染已治愈&#xff0c;或極早期/晚期梅毒&#xff1b; RPR陽性TPPA陰性&#xff1a;需警惕假陽性&#xff08…

Python 爬蟲實戰 | 企名科技

文章目錄 一、企名科技1、目標網站2、網站特點3、確定解密位置4、扣js代碼 一、企名科技 1、目標網站 網址&#xff1a;https://wx.qmpsee.com/articleDetail?idfeef62bfdac45a94b9cd89aed5c235be目標數據&#xff1a;獲取消費行業研究下面的13篇文章數據 2、網站特點 服…

Pikachu靶場

本質是信任了不可信的客戶端輸入。防御核心&#xff1a; 永不信任客戶端提交的權限參數&#xff08;如 user_id, role&#xff09;。強制服務端校驗用戶身份與操作權限。定期審計權限模型&#xff0c;避免業務迭代引入新漏洞。 水平越權 1&#xff0c;按照網站的提示要求登錄 進…

C++區別于C語言的提升用法(萬字總結)

1.namespace產生原因 在C語言中&#xff0c;變量&#xff0c;函數&#xff0c;以至于類都是大量存在的&#xff0c;因此會產生大量的名稱存在于全局作用域中&#xff0c;可能產生很多沖突&#xff0c;至此c的祖師爺為避免命名沖突和名字的污染&#xff0c;造出來了關鍵字names…

數據庫day-07

一、實驗名稱和性質 子查詢 驗證 設計 二、實驗目的 1&#xff0e;掌握子查詢的嵌套查詢&#xff1b; 2.掌握集合操作 3&#xff0e;了解EXISTS嵌套查詢方法&#xff1b; 三、實驗的軟硬件環境要求 硬件環境要求&#xff1a; PC機(單機) 使用的軟件名稱、版本號以及模塊…

【前端】【業務場景】【面試】在前端開發中,如何實現文件的上傳與下載功能,并且處理可能出現的錯誤情況?

前端文件上傳與下載攻略 本文目標&#xff1a;幫你快速掌握文件上傳 & 下載的核心實現方式&#xff0c;并在常見出錯場景下保持“優雅不崩潰”。 一、文件上傳 1. 基礎結構 <input type"file" id"fileInput" /> <button id"uploadBtn&…

Kafka 消息積壓監控和報警配置的詳細步驟

Kafka 消息積壓監控和報警配置的詳細步驟示例&#xff0c;涵蓋常用工具&#xff08;如 Prometheus Grafana、云服務監控&#xff09;和自定義腳本方法&#xff1a; 一、監控配置 方法1&#xff1a;使用 Prometheus Grafana kafka-exporter 步驟1&#xff1a;部署 kafka-ex…