diff --git a/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java b/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java
index dc16df2..8de5b3f 100644
--- a/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java
+++ b/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java
@@ -2,10 +2,12 @@ package io.github.xxyopen.novel.controller.front;
 
 import io.github.xxyopen.novel.core.common.constant.ApiRouterConsts;
 import io.github.xxyopen.novel.core.common.resp.RestResp;
+import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
 import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
 import io.github.xxyopen.novel.service.BookService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -24,6 +26,14 @@ public class BookController {
 
     private final BookService bookService;
 
+    /**
+     * 小说信息查询接口
+     * */
+    @GetMapping("{bookId}")
+    public RestResp<BookInfoRespDto> getById(@PathVariable("bookId") Long bookId){
+        return bookService.getById(bookId);
+    }
+
     /**
      * 小说点击榜查询接口
      * */
diff --git a/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java b/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java
index 6508610..8ee0317 100644
--- a/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java
+++ b/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java
@@ -54,6 +54,9 @@ public class CacheConsts {
      * */
     public static final String HOME_FRIEND_LINK_CACHE_NAME = "homeFriendLinkCache";
 
+    /**小说信息缓存*/
+    public static final String BOOK_INFO_CACHE_NAME = "bookInfoCache";
+
 
     /**
      * 缓存配置常量
@@ -70,7 +73,9 @@ public class CacheConsts {
 
         BOOK_UPDATE_RANK_CACHE(0,BOOK_UPDATE_RANK_CACHE_NAME,60,1),
 
-        HOME_FRIEND_LINK_CACHE(2,HOME_FRIEND_LINK_CACHE_NAME,0,1)
+        HOME_FRIEND_LINK_CACHE(2,HOME_FRIEND_LINK_CACHE_NAME,0,1),
+
+        BOOK_INFO_CACHE(0,BOOK_INFO_CACHE_NAME,60 * 60 * 18, 500)
         ;
 
         /**
diff --git a/src/main/java/io/github/xxyopen/novel/dto/resp/BookInfoRespDto.java b/src/main/java/io/github/xxyopen/novel/dto/resp/BookInfoRespDto.java
new file mode 100644
index 0000000..943bc8e
--- /dev/null
+++ b/src/main/java/io/github/xxyopen/novel/dto/resp/BookInfoRespDto.java
@@ -0,0 +1,81 @@
+package io.github.xxyopen.novel.dto.resp;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * 小说信息 响应DTO
+ * @author xiongxiaoyang
+ * @date 2022/5/15
+ */
+@Data
+@Builder
+public class BookInfoRespDto {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 类别ID
+     */
+    private Long categoryId;
+
+    /**
+     * 类别名
+     */
+    private String categoryName;
+
+    /**
+     * 小说封面地址
+     */
+    private String picUrl;
+
+    /**
+     * 小说名
+     */
+    private String bookName;
+
+    /**
+     * 作家id
+     */
+    private Long authorId;
+
+    /**
+     * 作家名
+     */
+    private String authorName;
+
+    /**
+     * 书籍描述
+     */
+    private String bookDesc;
+
+    /**
+     * 书籍状态;0-连载中 1-已完结
+     */
+    private Integer bookStatus;
+
+    /**
+     * 点击量
+     */
+    private Long visitCount;
+
+    /**
+     * 总字数
+     */
+    private Integer wordCount;
+
+    /**
+     * 评论数
+     */
+    private Integer commentCount;
+
+    /**
+     * 首章节ID
+     * */
+    private Long firstChapterId;
+
+
+}
diff --git a/src/main/java/io/github/xxyopen/novel/manager/BookInfoCacheManager.java b/src/main/java/io/github/xxyopen/novel/manager/BookInfoCacheManager.java
new file mode 100644
index 0000000..ce5cf0b
--- /dev/null
+++ b/src/main/java/io/github/xxyopen/novel/manager/BookInfoCacheManager.java
@@ -0,0 +1,62 @@
+package io.github.xxyopen.novel.manager;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import io.github.xxyopen.novel.core.constant.CacheConsts;
+import io.github.xxyopen.novel.dao.entity.BookChapter;
+import io.github.xxyopen.novel.dao.entity.BookInfo;
+import io.github.xxyopen.novel.dao.mapper.BookChapterMapper;
+import io.github.xxyopen.novel.dao.mapper.BookInfoMapper;
+import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
+import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Component;
+
+/**
+ * 小说信息 缓存管理类
+ *
+ * @author xiongxiaoyang
+ * @date 2022/5/12
+ */
+@Component
+@RequiredArgsConstructor
+public class BookInfoCacheManager {
+
+    private final BookInfoMapper bookInfoMapper;
+
+    private final BookChapterMapper bookChapterMapper;
+
+    /**
+     * 查询小说信息,并放入缓存中
+     */
+    @Cacheable(cacheManager = CacheConsts.CAFFEINE_CACHE_MANAGER
+            , value = CacheConsts.BOOK_INFO_CACHE_NAME)
+    public BookInfoRespDto getBookInfo(Long id) {
+        // 查询基础信息
+        BookInfo bookInfo = bookInfoMapper.selectById(id);
+        // 查询最新章节ID
+        QueryWrapper<BookChapter> queryWrapper = new QueryWrapper<>();
+        queryWrapper
+                .eq("book_id", id)
+                .orderByAsc("chapter_num")
+                .last("limit 1");
+        BookChapter firstBookChapter = bookChapterMapper.selectOne(queryWrapper);
+        // 组装响应对象
+        return BookInfoRespDto.builder()
+                .id(bookInfo.getId())
+                .bookName(bookInfo.getBookName())
+                .bookDesc(bookInfo.getBookDesc())
+                .bookStatus(bookInfo.getBookStatus())
+                .authorId(bookInfo.getAuthorId())
+                .authorName(bookInfo.getAuthorName())
+                .categoryId(bookInfo.getCategoryId())
+                .categoryName(bookInfo.getCategoryName())
+                .commentCount(bookInfo.getCommentCount())
+                .firstChapterId(firstBookChapter.getId())
+                .picUrl(bookInfo.getPicUrl())
+                .visitCount(bookInfo.getVisitCount())
+                .wordCount(bookInfo.getWordCount())
+                .build();
+    }
+
+
+}
diff --git a/src/main/java/io/github/xxyopen/novel/service/BookService.java b/src/main/java/io/github/xxyopen/novel/service/BookService.java
index 34e1357..1a197b2 100644
--- a/src/main/java/io/github/xxyopen/novel/service/BookService.java
+++ b/src/main/java/io/github/xxyopen/novel/service/BookService.java
@@ -1,6 +1,7 @@
 package io.github.xxyopen.novel.service;
 
 import io.github.xxyopen.novel.core.common.resp.RestResp;
+import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
 import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
 
 import java.util.List;
@@ -27,4 +28,9 @@ public interface BookService {
      * 小说更新榜查询
      * */
     RestResp<List<BookRankRespDto>> listUpdateRankBooks();
+
+    /**
+     * 小说信息查询
+     * */
+    RestResp<BookInfoRespDto> getById(Long bookId);
 }
diff --git a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java
index 30e1144..480eb50 100644
--- a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java
+++ b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java
@@ -1,7 +1,9 @@
 package io.github.xxyopen.novel.service.impl;
 
 import io.github.xxyopen.novel.core.common.resp.RestResp;
+import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
 import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
+import io.github.xxyopen.novel.manager.BookInfoCacheManager;
 import io.github.xxyopen.novel.manager.BookRankCacheManager;
 import io.github.xxyopen.novel.service.BookService;
 import lombok.RequiredArgsConstructor;
@@ -21,6 +23,8 @@ public class BookServiceImpl implements BookService {
 
     private final BookRankCacheManager bookRankCacheManager;
 
+    private final BookInfoCacheManager bookInfoCacheManager;
+
     @Override
     public RestResp<List<BookRankRespDto>> listVisitRankBooks() {
         return RestResp.ok(bookRankCacheManager.listVisitRankBooks());
@@ -35,4 +39,9 @@ public class BookServiceImpl implements BookService {
     public RestResp<List<BookRankRespDto>> listUpdateRankBooks() {
         return RestResp.ok(bookRankCacheManager.listUpdateRankBooks());
     }
+
+    @Override
+    public RestResp<BookInfoRespDto> getById(Long bookId) {
+        return RestResp.ok(bookInfoCacheManager.getBookInfo(bookId));
+    }
 }