[黑馬頭條]-文章列表加載

目錄

1.1)需求分析

1.2)表結構分析

ap_article 文章基本信息表

?ap_article_config 文章配置表

ap_article_content 文章內容表

導入文章數據庫

實現思路

接口定義

功能實現

定義接口

編寫mapper文件

編寫業務層代碼

實現類:

定義常量類

編寫控制器代碼

swagger測試


1.1)需求分析

文章布局展示:

所謂文章加載,指的是從數據庫中將文章的數據查詢出來,然后傳遞給前端頁面進行展示。

根據圖片可得,我們的文章對象可以是無圖,單圖,多圖等多種形態。

1.2)表結構分析

在表結構設計上,采用了分庫分表的思想,簡而言之就是根據我們項目來創建庫,然后將該庫的表進行細分,如圖所示,我們建立了一個名為leadnews_article庫,專門用來存放黑馬頭條中跟文章有關的信息,其中有文章表,文章配置表,文章內容表。這樣的好處就是將文章大寬表進行細分,冷熱數據分離,大字段分離等。像我們的微服務項目,經常會這樣設計表。

在這里,嵌入一個Java數據類型和MySQL數據類型的對照表,方便在開發和數據庫設計時作為參考,直接跳轉鏈接直達:

Java和MySQL數據類型對照表https://blog.csdn.net/weixin_43822632/article/details/144501788?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522af79b0f2b9c1bdd19e156c4a27fe22d7%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=af79b0f2b9c1bdd19e156c4a27fe22d7&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-144501788-null-null.142^v102^pc_search_result_base4&utm_term=java%E5%92%8Cmysql%E7%9A%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%AF%B9%E7%85%A7%E5%9B%BE&spm=1018.2226.3001.4187

ap_article 文章基本信息表

代碼如下:

-- auto-generated definition
create table ap_article
(id           bigint unsigned auto_incrementprimary key,title        varchar(50)                  null comment '標題',author_id    int unsigned                 null comment '文章作者的ID',author_name  varchar(20)                  null comment '作者昵稱',channel_id   int unsigned                 null comment '文章所屬頻道ID',channel_name varchar(10)                  null comment '頻道名稱',layout       tinyint unsigned             null comment '文章布局0 無圖文章1 單圖文章2 多圖文章',flag         tinyint unsigned             null comment '文章標記0 普通文章1 熱點文章2 置頂文章3 精品文章4 大V 文章',images       varchar(1000)                null comment '文章圖片多張逗號分隔',labels       varchar(500)                 null comment '文章標簽最多3個 逗號分隔',likes        int unsigned                 null comment '點贊數量',collection   int unsigned                 null comment '收藏數量',comment      int unsigned                 null comment '評論數量',views        int unsigned                 null comment '閱讀數量',province_id  int unsigned                 null comment '省市',city_id      int unsigned                 null comment '市區',county_id    int unsigned                 null comment '區縣',created_time datetime                     null comment '創建時間',publish_time datetime                     null comment '發布時間',sync_status  tinyint(1)       default 0   null comment '同步狀態',origin       tinyint unsigned default '0' null comment '來源',static_url   varchar(150)                 null
)comment '文章信息表,存儲已發布的文章';

?ap_article_config 文章配置表

代碼如下:

-- auto-generated definition
create table ap_article_config
(id         bigint unsigned auto_increment comment '主鍵'primary key,article_id bigint unsigned  null comment '文章ID',is_comment tinyint unsigned null comment '是否可評論',is_forward tinyint unsigned null comment '是否轉發',is_down    tinyint unsigned null comment '是否下架',is_delete  tinyint unsigned null comment '是否已刪除'
)comment 'APP已發布文章配置表';create index idx_article_idon ap_article_config (article_id);

ap_article_content 文章內容表

代碼如下:

-- auto-generated definition
create table ap_article_content
(id         bigint unsigned auto_increment comment '主鍵'primary key,article_id bigint unsigned null comment '文章ID',content    longtext        null comment '文章內容'
)comment 'APP已發布文章內容表';create index idx_article_idon ap_article_content (article_id);

導入文章數據庫

ap_article文章表對應實體

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.io.Serializable;
import java.util.Date;/*** <p>* 文章信息表,存儲已發布的文章* </p>** @author itheima*/@Data
@TableName("ap_article")//指定數據庫中的名字
public class ApArticle implements Serializable {//IdType.ID_WORKER指雪花算法生成id@TableId(value = "id",type = IdType.ID_WORKER)private Long id;/*** 標題*/private String title;/*** 作者id*/@TableField("author_id")private Long authorId;/*** 作者名稱*/@TableField("author_name")private String authorName;/*** 頻道id*/@TableField("channel_id")private Integer channelId;/*** 頻道名稱*/@TableField("channel_name")private String channelName;/*** 文章布局  0 無圖文章   1 單圖文章    2 多圖文章*/private Short layout;/*** 文章標記  0 普通文章   1 熱點文章   2 置頂文章   3 精品文章   4 大V 文章*/private Byte flag;/*** 文章封面圖片 多張逗號分隔*/private String images;/*** 標簽*/private String labels;/*** 點贊數量*/private Integer likes;/*** 收藏數量*/private Integer collection;/*** 評論數量*/private Integer comment;/*** 閱讀數量*/private Integer views;/*** 省市*/@TableField("province_id")private Integer provinceId;/*** 市區*/@TableField("city_id")private Integer cityId;/*** 區縣*/@TableField("county_id")private Integer countyId;/*** 創建時間*/@TableField("created_time")private Date createdTime;/*** 發布時間*/@TableField("publish_time")private Date publishTime;/*** 同步狀態*/@TableField("sync_status")private Boolean syncStatus;/*** 來源*/private Boolean origin;/*** 靜態頁面地址*/@TableField("static_url")private String staticUrl;
}

ap_article_config文章配置對應實體類

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** <p>* APP已發布文章配置表* </p>** @author itheima*/@Data
@NoArgsConstructor//添加無參構造方法
@TableName("ap_article_config")
//文章配置類,是一個pojo類,和數據庫中對應的表一一對應
public class ApArticleConfig implements Serializable {//添加有參構造方法,因為這個構造方法只有一個參數字段,所以需要手動聲明//如果是需要全參構造方法,則可以直接在類上使用@AllArgsConstructor注解//這個構造方法是只給articleId賦值,其他字段采取默認值即可public ApArticleConfig(Long articleId){this.articleId = articleId;//文章idthis.isComment = true;//默認開啟評論this.isForward = true;//默認開啟轉發this.isDelete = false;//默認沒有刪除this.isDown = false;//默認沒有下架}@TableId(value = "id",type = IdType.ID_WORKER)private Long id;/*** 文章id*/@TableField("article_id")private Long articleId;/*** 是否可評論* true: 可以評論   1* false: 不可評論  0*/@TableField("is_comment")private Boolean isComment;/*** 是否轉發* true: 可以轉發   1* false: 不可轉發  0*/@TableField("is_forward")private Boolean isForward;/*** 是否下架* true: 下架   1* false: 沒有下架  0*/@TableField("is_down")private Boolean isDown;/*** 是否已刪除* true: 刪除   1* false: 沒有刪除  0*/@TableField("is_delete")private Boolean isDelete;
}

ap_article_content 文章內容對應的實體類

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.io.Serializable;@Data
@TableName("ap_article_content")
public class ApArticleContent implements Serializable {//IdType.ID_WORKER指雪花算法生成id@TableId(value = "id",type = IdType.ID_WORKER)private Long id;/*** 文章id*/@TableField("article_id")private Long articleId;/*** 文章內容*/private String content;
}

實現思路

1,在默認頻道展示10條文章信息

2,可以切換頻道查看不同種類文章

3,當用戶下拉可以加載最新的文章(分頁)本頁文章列表中發布時間為最大的時間為依據

4,當用戶上拉可以加載更多的文章信息(按照發布時間)本頁文章列表中發布時間最小的時間為依據

5,如果是當前頻道的首頁,前端傳遞默認參數:

  • maxBehotTime:0(毫秒)

  • minBehotTime:20000000000000(毫秒)--->2063年

接口定義

ArticleHomeDto

import lombok.Data;import java.util.Date;@Data//注解@Data是lombok提供的注解,它能自動生成get、set方法,還能自動生成equals、hashCode、toString方法。
//這是文章首頁dto,用來封裝從前端傳遞過來的請求參數
public class ArticleHomeDto {// 最大時間Date maxBehotTime;// 最小時間Date minBehotTime;// 分頁sizeInteger size;// 頻道IDString tag;
}

功能實現

導入heima-leadnews-article微服務:

注意:需要在heima-leadnews-service的pom文件夾中添加子模塊信息,如下:

當我們在父工程下創建一個子工程時,需要在父工程中添加<module>標簽,指名子工程的名字。

需要在nacos中添加對應的配置:

spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/leadnews_article?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername: rootpassword: root
# 設置Mapper接口所對應的XML文件位置,如果你在Mapper接口中有自定義方法,需要進行該配置
mybatis-plus:mapper-locations: classpath*:mapper/*.xml# 設置別名包掃描路徑,通過該屬性可以給包中的類注冊別名type-aliases-package: com.heima.model.article.pojos

定義接口

import com.heima.model.article.dtos.ArticleHomeDto;
import com.heima.model.common.dtos.ResponseResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api/v1/article")
public class ArticleHomeController {@PostMapping("/load")public ResponseResult load(@RequestBody ArticleHomeDto dto) {return null;}@PostMapping("/loadmore")public ResponseResult loadMore(@RequestBody ArticleHomeDto dto) {return null;}@PostMapping("/loadnew")public ResponseResult loadNew(@RequestBody ArticleHomeDto dto) {return null;}
}

編寫mapper文件

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.heima.model.article.dtos.ArticleHomeDto;
import com.heima.model.article.pojos.ApArticle;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface ApArticleMapper extends BaseMapper<ApArticle> {public List<ApArticle> loadArticleList(@Param("dto") ArticleHomeDto dto, @Param("type") Short type);}

對應的映射文件

在resources中新建mapper/ApArticleMapper.xml 如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.heima.article.mapper.ApArticleMapper"><resultMap id="resultMap" type="com.heima.model.article.pojos.ApArticle"><id column="id" property="id"/><result column="title" property="title"/><result column="author_id" property="authorId"/><result column="author_name" property="authorName"/><result column="channel_id" property="channelId"/><result column="channel_name" property="channelName"/><result column="layout" property="layout"/><result column="flag" property="flag"/><result column="images" property="images"/><result column="labels" property="labels"/><result column="likes" property="likes"/><result column="collection" property="collection"/><result column="comment" property="comment"/><result column="views" property="views"/><result column="province_id" property="provinceId"/><result column="city_id" property="cityId"/><result column="county_id" property="countyId"/><result column="created_time" property="createdTime"/><result column="publish_time" property="publishTime"/><result column="sync_status" property="syncStatus"/><result column="static_url" property="staticUrl"/></resultMap><select id="loadArticleList" resultMap="resultMap">SELECTaa.*FROM`ap_article` aaLEFT JOIN ap_article_config aac ON aa.id = aac.article_id<where>and aac.is_delete != 1and aac.is_down != 1<!-- loadmore --><if test="type != null and type == 1">and aa.publish_time <![CDATA[<]]> #{dto.minBehotTime}</if><if test="type != null and type == 2">and aa.publish_time <![CDATA[>]]> #{dto.maxBehotTime}</if><if test="dto.tag != '__all__'">and aa.channel_id = #{dto.tag}</if></where>order by aa.publish_time desclimit #{dto.size}</select></mapper>

編寫業務層代碼

import com.baomidou.mybatisplus.extension.service.IService;
import com.heima.model.article.dtos.ArticleHomeDto;
import com.heima.model.article.pojos.ApArticle;
import com.heima.model.common.dtos.ResponseResult;import java.io.IOException;public interface ApArticleService extends IService<ApArticle> {/*** 根據參數加載文章列表* @param loadtype 1為加載更多  2為加載最新* @param dto* @return*/ResponseResult load(Short loadtype, ArticleHomeDto dto);}

實現類:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.article.mapper.ApArticleMapper;
import com.heima.article.service.ApArticleService;
import com.heima.common.constants.ArticleConstants;
import com.heima.model.article.dtos.ArticleHomeDto;import com.heima.model.article.pojos.ApArticle;
import com.heima.model.common.dtos.ResponseResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.Date;
import java.util.List;@Service
@Transactional
@Slf4j
public class ApArticleServiceImpl  extends ServiceImpl<ApArticleMapper, ApArticle> implements ApArticleService {// 單頁最大加載的數字private final static short MAX_PAGE_SIZE = 50;@Autowiredprivate ApArticleMapper apArticleMapper;/*** 根據參數加載文章列表* @param loadtype 1為加載更多  2為加載最新* @param dto* @return*/@Overridepublic ResponseResult load(Short loadtype, ArticleHomeDto dto) {//1.校驗參數Integer size = dto.getSize();if(size == null || size == 0){size = 10;}size = Math.min(size,MAX_PAGE_SIZE);dto.setSize(size);//類型參數檢驗if(!loadtype.equals(ArticleConstants.LOADTYPE_LOAD_MORE)&&!loadtype.equals(ArticleConstants.LOADTYPE_LOAD_NEW)){loadtype = ArticleConstants.LOADTYPE_LOAD_MORE;}//文章頻道校驗if(StringUtils.isEmpty(dto.getTag())){dto.setTag(ArticleConstants.DEFAULT_TAG);}//時間校驗if(dto.getMaxBehotTime() == null) dto.setMaxBehotTime(new Date());if(dto.getMinBehotTime() == null) dto.setMinBehotTime(new Date());//2.查詢數據List<ApArticle> apArticles = apArticleMapper.loadArticleList(dto, loadtype);//3.結果封裝ResponseResult responseResult = ResponseResult.okResult(apArticles);return responseResult;}}

定義常量類

public class ArticleConstants {public static final Short LOADTYPE_LOAD_MORE = 1;public static final Short LOADTYPE_LOAD_NEW = 2;public static final String DEFAULT_TAG = "__all__";}

編寫控制器代碼

import com.heima.article.service.ApArticleService;
import com.heima.common.constants.ArticleConstants;
import com.heima.model.article.dtos.ArticleHomeDto;
import com.heima.model.common.dtos.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api/v1/article")
public class ArticleHomeController {@Autowiredprivate ApArticleService apArticleService;@PostMapping("/load")public ResponseResult load(@RequestBody ArticleHomeDto dto) {return apArticleService.load(ArticleConstants.LOADTYPE_LOAD_MORE,dto);}@PostMapping("/loadmore")public ResponseResult loadMore(@RequestBody ArticleHomeDto dto) {return apArticleService.load(ArticleConstants.LOADTYPE_LOAD_MORE,dto);}@PostMapping("/loadnew")public ResponseResult loadNew(@RequestBody ArticleHomeDto dto) {return apArticleService.load(ArticleConstants.LOADTYPE_LOAD_NEW,dto);}
}

swagger測試

第一:在app網關的微服務的nacos的配置中心添加文章微服務的路由,完整配置如下:

spring:cloud:gateway:globalcors:cors-configurations:'[/**]': # 匹配所有請求allowedOrigins: "*" #跨域處理 允許所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETEroutes:# 用戶微服務- id: useruri: lb://leadnews-userpredicates:- Path=/user/**filters:- StripPrefix= 1# 文章微服務- id: articleuri: lb://leadnews-articlepredicates:- Path=/article/**filters:- StripPrefix= 1

?第二:啟動nginx,直接使用前端項目測試,啟動文章微服務,用戶微服務、app網關微服務

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

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

相關文章

使用TIANAI-CAPTCHA進行行為驗證碼的生成和緩存的二次校驗

1.導入依賴&#xff1a;<dependency><groupId>cloud.tianai.captcha</groupId><artifactId>tianai-captcha-springboot-starter</artifactId><version>1.5.2</version> </dependency>2.在application.yml中配置驗證碼相關配置…

db.refresh()的重復使用和db.rollback()

db.refresh()在 SQLAlchemy 中&#xff0c;db.refresh() 用于從數據庫中重新加載對象的狀態&#xff0c;確保對象屬性與數據庫中的實際數據保持一致。下面詳細介紹其使用場景和作用&#xff1a;1.獲取數據庫生成的值當數據庫自動生成字段&#xff08;如自增 ID、默認值、觸發器…

《Web安全之機器學習入門》讀書筆記總結

目錄 一、案例總結 1、基礎知識 &#xff08;1&#xff09;第1章 通向智能安全的旅程 &#xff08;2&#xff09;第2章 打造機器學習工具箱 &#xff08;3&#xff09;第3章 機器學習概述 &#xff08;4&#xff09;第4章 Web安全基礎 2、安全案例 &#xff08;1&#…

github 近期熱門項目-2025.7.20

github 近期熱門項目-2025.7.20 GitHub 上近期熱門或趨勢項目的信息可以從多個來源獲取,包括 GitHub Trending 頁面、技術社區推薦、以及各大技術媒體的報道。以下是一些近期在 GitHub 上備受關注的項目類別和示例: 1. AI 與機器學習項目 隨著 AI 技術的快速發展,許多開源…

使用Python清理Excel中的空行和單元格內部空行:初學者指南

前言 作為數據處理人員或辦公室工作者,你可能經常遇到Excel文件中存在多余空行或單元格內有多余空行的問題。這些不必要的空白會影響數據的美觀性,更重要的是會給后續的數據分析、合并或處理帶來麻煩。本文將介紹一個簡單的Python腳本,幫助你高效地解決這些問題。 很多工具…

華為歐拉系統(openEuler)安裝 Docker 容器完整教程

&#x1f525; 前言&#xff1a;在國產化操作系統日益普及的當下&#xff0c;華為歐拉系統&#xff08;openEuler&#xff09;憑借其穩定性和安全性受到不少用戶青睞。但 Docker 官方暫未提供對 openEuler 的原生支持&#xff0c;不過好在 openEuler 與 CentOS 底層架構兼容&am…

數據結構--JDK17新增語法和順序表

一.yield關鍵字用于switch語句上的case代碼塊的返回值舉例&#xff1a;二.var關鍵字作用&#xff1a;當類型名字較長時可以簡化代碼。注意事項&#xff1a;1.不能使用var來聲明字段2.不能使用var來聲明方法參數3.不能使用var來聲明方法返回類型4.使用時必須初始化&#xff0c;但…

1 滲透基礎

目錄 基礎前沿 1 vulhub環境搭建 1 proxychains工具&#xff1a;編輯配置文件 2 docker docker環境搭建 配置docker的代理&#xff1a; 2 nginx編譯安裝--FPM 1 php.ini 2 php-fpm 3 nginx 4 nginx php-fpm php 1 基本角色分工 2. 請求處理全流程 步驟 1&#xff…

基于Java+SpringBoot 的榆林特色旅游網站

源碼編號&#xff1a;S678源碼名稱&#xff1a;基于SpringBoot 的榆林特色旅游網站用戶類型&#xff1a;雙角色&#xff0c;用戶、管理員數據庫表數量&#xff1a;22 張表主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven運行環境&#xff1a;Windows/Mac、JDK1…

Python設計模式深度解析:單例模式(Singleton Pattern)完全指南

Python設計模式深度解析&#xff1a;單例模式&#xff08;Singleton Pattern&#xff09;完全指南前言什么是單例模式&#xff1f;單例模式的三個關鍵要素基礎實現&#xff1a;異常控制式單例Python中的經典單例實現1. 使用 __new__ 方法實現2. 線程安全的單例實現3. 裝飾器實現…

LVS 原理詳解及部署(包含實驗案例)

一、集群和分布式簡介1.系統性能擴展方式Scale Up&#xff08;向上擴展&#xff09;&#xff1a;通過增強單臺服務器的硬件性能&#xff08;如提升 CPU、內存、存儲等&#xff09;來提高處理能力&#xff0c;適用于業務初期或對單點性能要求高的場景。這種方式簡單易行&#xf…

兩個路由器通過不同的網段互聯

一&#xff0c;實驗拓撲圖&#xff1a;二、實驗說明 &#xff1a;在兩個接口配置好兩個不同網段的的ip地址后是不能相互通信的。經過測試用ospf把兩個網段宣告進area 0 是行不通的。最后我們通過靜態路由來配置&#xff0c;遇到一個最大的問題是&#xff0c;我們的下一跳地址應…

Python趣味算法:冒泡排序——從理論到極致優化

排序算法是程序員的必修課,而冒泡排序是理解算法思維的絕佳起點。本文將深入解析冒泡排序的7種優化技巧,通過可視化演示+多維度性能分析,帶你徹底掌握這一經典算法! 看在每天堅持分享有趣知識的份上,點個關注吧(づ ̄ 3 ̄)づ 關注是我更新的動力 ̄︶ ̄? ̄︶ ̄?) 作者會…

[simdjson] document_stream | iterate_many() | batch_size | 線程加速 | 輕量handle

第七章&#xff1a;文檔流 歡迎回來 在前面的章節中&#xff0c;我們學習了如何使用解析器結合填充字符串獲取表示JSON根節點的文檔&#xff0c;并通過按需API&#xff08;On-Demand API&#xff09;遍歷值、對象和數組&#xff0c;同時使用simdjson_result進行錯誤處理。 到…

【機器學習】向量數據庫選型指南:企業內網部署場景

向量數據庫選型指南&#xff1a;企業內網部署場景一、選型背景與關鍵需求 在企業級機器學習應用中&#xff0c;特別是涉及圖片、視頻等非結構化數據的場景&#xff0c;向量數據庫已成為核心基礎設施。傳統數據庫難以高效處理高維向量的相似度檢索需求&#xff08;如圖片相似性搜…

Django母嬰商城項目實踐(八)- 數據渲染與顯示之首頁

8、數據渲染與顯示 1 概述 Django作為Web框架,需要一種很便利的方法動態地生成HTML網頁,因此有了模板這個概念。模板包含所需HTML的部分代碼以及一些特殊語法,特殊語法用于描述如何將視圖傳遞的數據動態插入HTML網頁中。 Django可以配置一個或多個模板引擎(甚至是0個,如前…

Redis常見線上問題

文章目錄 Redis常見線上問題 引言 報告背景與目的 Redis版本與環境說明 性能瓶頸問題 慢查詢分析與優化 高CPU與網絡延遲 內存管理問題 內存碎片成因與優化 BigKey與內存溢出 數據一致性與高可用問題 主從同步延遲 腦裂問題與解決方案 持久化機制問題 RDB與AOF對比 核心特性對比…

Typecho博客集成阿里云CDN+OSS實現全站加速方案

文章目錄 Typecho博客系統集成阿里云CDN和OSS實現靜態資源加速 引言 一、技術選型與準備工作 1.1 為什么選擇阿里云CDN+OSS組合 1.2 準備工作 二、OSS存儲桶創建與配置 2.1 創建OSS存儲桶 2.2 配置Bucket權限 2.3 配置跨域訪問(CORS) 三、CDN加速配置 3.1 添加CDN域名 3.2 配置…

計算機畢業設計Java網咖管理系統 Java技術實現的網咖綜合管理系統開發 基于Spring Boot框架的網咖運營管理系統設計

計算機畢業設計Java網咖管理系統e0btvq7l &#xff08;配套有源碼 程序 mysql數據庫 論文&#xff09;本套源碼可以先看具體功能演示視頻領取&#xff0c;文末有聯xi 可分享隨著互聯網技術的飛速發展和電子競技的全球興起&#xff0c;網咖作為一種新興的休閑娛樂場所&#xff0…

Kotlin main函數

main() 函數 來仔細看看 main() 函數。實際上&#xff0c;它就是一個很常見的函數&#xff1a;你可以對它做任何你能對普通函數做的事。唯一的不同是&#xff1a;它是程序的入口點&#xff08;entry point&#xff09;。這意味著程序的執行從調用這個函數開始。 我們來拆解一下…