NoSQL入門指南:Redis與MongoDB的Java實戰

一、為什么需要NoSQL?

在傳統SQL數據庫中,數據必須嚴格遵循預定義的表結構,就像把所有物品整齊擺放在固定尺寸的貨架上。而NoSQL(Not Only SQL)數據庫則像一個靈活的儲物間,允許存儲各種類型的數據,無需提前規劃結構。

NoSQL的核心特點:

  • 非關系型:無需預定義表結構
  • 分布式:天然支持水平擴展
  • 高性能:適合處理海量數據
  • 靈活存儲:支持鍵值、文檔、列族等多種格式

二、Redis:內存中的超級儲物柜

1. 核心特性

  • 數據類型豐富:支持字符串、哈希、列表、集合、有序集合等
  • 內存存儲:讀寫速度極快(10萬+操作/秒)
  • 持久化:支持RDB快照和AOF日志

2. Java操作示例

添加依賴(Maven)
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version>
</dependency>
基本操作代碼
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;public class RedisExample {public static void main(String[] args) {try (Jedis jedis = new Jedis("localhost", 6379)) {// 存儲用戶信息jedis.set("user:1001", "{\"name\":\"張三\",\"age\":25}");// 存儲哈希數據jedis.hset("user:1001:profile", "email", "zhangsan@example.com");jedis.hset("user:1001:profile", "phone", "13812345678");// 自增計數器jedis.incr("post:view:100");  // 閱讀量+1// 有序集合存儲排行榜jedis.zadd("rank:score", 95, "李四");jedis.zadd("rank:score", 88, "王五");// 事務操作Transaction transaction = jedis.multi();transaction.incr("counter");transaction.exec();}}
}

3. 典型應用場景

  • 緩存系統:存儲高頻訪問數據
  • 會話管理:存儲用戶會話信息
  • 計數器:統計文章閱讀量、點贊數
  • 實時消息:使用Pub/Sub功能實現消息隊列

三、MongoDB:靈活的文檔數據庫

1. 核心特性

  • 文檔存儲:使用BSON格式存儲半結構化數據
  • 動態模式:無需預定義字段
  • 水平擴展:支持分片集群
  • 強大查詢:支持復雜的聚合操作

2. Java操作示例

添加依賴(Maven)
<dependency><groupId>org.mongodb</groupId><artifactId>mongodb-driver-sync</artifactId><version>4.6.0</version>
</dependency>
基本操作代碼
import com.mongodb.MongoClientSettings;
import com.mongodb.client.*;
import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;import java.util.Arrays;import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;public class MongoDBExample {public static void main(String[] args) {// 配置POJO映射CodecRegistry pojoCodecRegistry = fromProviders(PojoCodecProvider.builder().automatic(true).build());CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), pojoCodecRegistry);// 連接MongoDBtry (MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder().codecRegistry(codecRegistry).applyToClusterSettings(builder ->builder.hosts(Arrays.asList(new ServerAddress("localhost", 27017)))).build())) {MongoDatabase database = mongoClient.getDatabase("mydatabase");MongoCollection<User> collection = database.getCollection("users", User.class);// 插入文檔User user = new User("張三", 25, "zhangsan@example.com", new Address("長安街1號", "北京"));collection.insertOne(user);// 查詢文檔FindIterable<User> results = collection.find(Filters.eq("name", "張三"));for (User u : results) {System.out.println(u);}// 更新文檔collection.updateOne(Filters.eq("name", "張三"),Updates.set("age", 26));// 聚合查詢AggregateIterable<Document> aggregate = collection.aggregate(Arrays.asList(Aggregates.match(Filters.gte("age", 18)),Aggregates.group("$address.city", Accumulators.sum("count", 1))));for (Document doc : aggregate) {System.out.println(doc);}}}
}// 定義實體類
class User {private String name;private int age;private String email;private Address address;// 構造方法、getter/setter省略
}class Address {private String street;private String city;// 構造方法、getter/setter省略
}

3. 典型應用場景

  • 日志記錄:存儲非結構化日志數據
  • 內容管理:存儲文章、評論等
  • 電商訂單:存儲包含復雜屬性的訂單
  • 實時分析:使用聚合框架處理海量數據

四、Redis vs MongoDB:如何選擇?

特性RedisMongoDB
數據模型鍵值對(支持豐富數據結構)文檔型(BSON格式)
存儲位置內存優先磁盤存儲
查詢能力簡單查詢復雜查詢+聚合
擴展性主從復制+哨兵分片集群
適用場景緩存、計數器、實時消息日志、內容管理、實時分析

五、總結

NoSQL數據庫為現代應用提供了更靈活的數據存儲方式:

  • Redis適合需要高性能讀寫的場景
  • MongoDB適合處理半結構化數據和復雜查詢
  • 傳統SQL適合需要事務支持的場景

建議根據具體業務需求選擇合適的工具,必要時可以混合使用多種數據庫。

六、推薦學習資源

  1. Redis Java客戶端文檔
  2. MongoDB Java驅動文檔
  3. 《Redis實戰》
  4. 《MongoDB權威指南》

現在就動手用Java操作Redis和MongoDB,體驗NoSQL的靈活性吧!🚀

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

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

相關文章

Java 列表初始化全解析:7種方式詳解與最佳實踐

文章目錄 **引言****1. 傳統逐個添加元素****特點****注意事項** **2. Arrays.asList() 構造函數****特點****注意事項** **3. 雙括號初始化&#xff08;匿名內部類&#xff09;****特點****注意事項** **4. Java 9 List.of()&#xff08;不可變列表&#xff09;****特點****注…

最大公約數和最小倍數 java

在Java中&#xff0c;計算兩個數的最大公約數&#xff08;Greatest Common Divisor, GCD&#xff09;和最小公倍數&#xff08;Least Common Multiple, LCM&#xff09;是常見的編程問題。以下是具體的實現方法和代碼示例。 --- ### **1. 最大公約數 (GCD)** 最大公約數是指…

數據庫——視圖

一、視圖的定義與核心特性 1.基本概念 (1)視圖(View)是基于一個或多個底層表(或視圖)的虛擬表,其本身不存儲數據,僅保存查詢語句的定義。當用戶查詢視圖時,數據庫會動態執行其封裝的SQL語句,生成結果集。 (2)本質:視圖是底層表的邏輯映射,結構與表相同(由行和列…

【Proteus仿真】【32單片機-A008】MPX4115壓力檢測系統設計

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 聯系作者 一、主要功能 1、壓力檢測與LCD顯示 2、超過上限&#xff0c;降壓模塊啟動 3、壓力檢測范圍15kpa-115kpa 4、壓力閾值設置 5、超限報警 二、使用步驟 系統運行后&#xff0c;LCD160…

java和c#的相似及區別基礎對比

用過十幾種語言&#xff0c;但是java和c#是最為重要的兩門。c#發明人曾主導開發了pascal和delphi&#xff0c;加入微軟后&#xff0c;參考了c和java完成了c#和net。大家用過java或c#任意一種的&#xff0c;可以通過本篇文章快速掌握另外一門語言。 基礎語法 變量聲明&#xf…

OpenBayes 一周速覽|1分鐘生成完整音樂,DiffRhythm人聲伴奏一鍵搞定; Stable Virtual Camera重塑3D視頻創作

公共資源速遞 5 個數據集&#xff1a; * 302 例罕見病病例數據集 * DRfold2 RNA 結構測試數據集 * NaturalReasoning 自然推理數據集 * VenusMutHub 蛋白質突變小樣本數據集 * Bird Vs Drone 鳥類與無人機圖像分類數據集 2 個模型&#xff1a; * Qwen2.5-0mni * Llama…

PostgreSQL 實例運行狀態全面檢查

PostgreSQL 實例運行狀態全面檢查 PostgreSQL 實例的健康檢查是數據庫運維的核心工作&#xff0c;以下是系統化的狀態檢查方法和關鍵指標解讀。 一 基礎健康檢查 1.1 實例可用性檢查 # 快速連接測試 pg_isready -h localhost -p 5432 -U postgres -d postgres# 返回狀態說明…

利用 Python 進行股票數據可視化分析

在金融市場中&#xff0c;股票數據的可視化分析對于投資者和分析師來說至關重要。通過可視化&#xff0c;我們可以更直觀地觀察股票價格的走勢、交易量的變化以及不同股票之間的相關性等。 Python 作為一種功能強大的編程語言&#xff0c;擁有豐富的數據處理和可視化庫&#xf…

時序約束高級進階使用詳解二:Set_Min_Delay

目錄 一、前言 二、設計示例 2.1 示例代碼 2.2 時序約束 三、Set_min_delay 3.1 start points 3.1.1 對象有效性 3.1.2 邊沿有效性 3.1.3 start point非有效起點 3.2 Through points 3.2.1 約束對象為Cells 3.2.2 約束對象為Cell pin/Net 3.3 to points 3.4 rise…

2025-4-12-C++ 學習 XOR 三元組 異或 急轉彎問題

C的學習必須更加精進一些&#xff0c;對于好多的函數和庫的了解必須深入一些。 文章目錄 3513. 不同 XOR 三元組的數目 I題解代碼 3514. 不同 XOR 三元組的數目 II題解代碼 晚上&#xff0c;10點半&#xff0c;參加了LC的競賽&#xff0c;ok了一道&#xff0c;哈哈~ ??第二道…

圖像形態學操作對比(Opencv)

形態學基于圖像的形狀進行操作&#xff0c;用于處理二值化圖像&#xff0c;主要包括腐蝕和膨脹兩種基本操作。這些操作通常用于去除噪聲、分隔或連接相鄰的元素以及尋找圖像中顯著的最大點和最小點。 1. 形態學操作 import cv2 import numpy as np import matplotlib.pyplot …

sql 向Java的映射

優化建議&#xff0c;可以在SQL中控制它的類型 在 MyBatis 中&#xff0c;如果返回值類型設置為 java.util.Map&#xff0c;默認情況下可以返回 多行多列的數據

excel中的VBA指令示例(一)

示例注釋&#xff1a; Sub 宏1() sub是宏開頭&#xff0c;宏1是宏的名稱&#xff0c;自定義&#xff0c;在按鈕中可指定用某個宏 后面是注釋 Sheets("裝配材料").Select ‘選擇表 裝配材料 Ce…

【Linux C】簡單bash設計

主要功能 循環提示用戶輸入命令&#xff08;minibash$&#xff09;。創建子進程&#xff08;fork()&#xff09;執行命令&#xff08;execlp&#xff09;。父進程等待子進程結束&#xff08;waitpid&#xff09;。關鍵問題 參數處理缺失&#xff1a;scanf("%s", buf)…

【vue】基礎

一、vi-if 1.1基本使用 必須綁定大盒子包住的代碼&#xff0c;使用id或者class都可以進行綁定 new Vue({ el:"#id" el:".class" }) 1.2v-if和v-show的區別 v-show會渲染&#xff0c;但是不顯示&#xff0c;v-if不渲染不顯示 1.3vue實例的作用范圍 必須包…

【數據結構_5】鏈表(模擬實現以及leetcode上鏈表相關的題目)

書接上文&#xff0c;繼續編寫鏈表的功能 4.鏈表的中間插入 在鏈表中&#xff0c;本身是沒有下標這樣的概念的&#xff0c;不像順序表&#xff0c;順序表根據下標訪問元素&#xff0c;O(1)復雜度。鏈表需要遍歷之后找到正確的位置才能進行插入&#xff0c;為O&#xff08;N&a…

C語言的發展史

一、起源 C語言的起源可以追溯到20世紀60年代末期。其前身是BCPL&#xff08;Basic Combined Programming Language&#xff09;語言&#xff0c;由劍橋大學的Martin Richards于1967年在CPL語言的基礎上簡化而來。1970年&#xff0c;美國貝爾實驗室的Ken Thompson以BCPL語言為…

深入解析棧式虛擬機與反向波蘭表示法

1.1 什么是虛擬機&#xff1f; 虛擬機&#xff08;Virtual Machine, VM&#xff09;是一種軟件實現的計算機系統&#xff0c;提供與物理計算機相類似的環境&#xff0c;但在軟件層面運行。虛擬機的存在簡化了跨平臺兼容性、資源管理以及安全隔離等問題。 1.2 棧式虛擬機的架構…

ubuntu 系統安裝Mysql

安裝 mysql sudo apt update sudo apt install mysql-server 啟動服務 sudo systemctl start mysql 設置為開機自啟 sudo systemctl enable mysql 查看服務狀態 &#xff08;看到類似“active (running)”的狀態信息代表成功&#xff09; sudo systemctl status mysql …

《前端面試題之 CSS篇(第一集)》

目錄 1、CSS的盒模型2、CSS選擇器及其優先級3、隱藏元素的方法有那些4、px、em、rem的區別及使用場景5、重排、重繪有什么區別6、水平垂直居中的實現7、CSS中可繼承與不可繼承屬性有哪些8、Sass、Less 是什么&#xff1f;為什么要使用他們&#xff1f;9、CSS預處理器/后處理器是…