文档最大Id缓存时间
This commit is contained in:
parent
0ddd39e209
commit
7bdc47559a
@ -24,6 +24,8 @@ var postsCache *cache.MapCache[uint64, models.WpPosts]
|
|||||||
var monthPostsCache *cache.MapCache[string, []uint64]
|
var monthPostsCache *cache.MapCache[string, []uint64]
|
||||||
var postListIdsCache *cache.MapCache[string, PostIds]
|
var postListIdsCache *cache.MapCache[string, PostIds]
|
||||||
var searchPostIdsCache *cache.MapCache[string, PostIds]
|
var searchPostIdsCache *cache.MapCache[string, PostIds]
|
||||||
|
var maxPostIdCache *cache.SliceCache[uint64]
|
||||||
|
var TotalRaw int
|
||||||
|
|
||||||
func InitActionsCommonCache() {
|
func InitActionsCommonCache() {
|
||||||
archivesCaches = &Arch{
|
archivesCaches = &Arch{
|
||||||
@ -49,6 +51,8 @@ func InitActionsCommonCache() {
|
|||||||
recentCommentsCaches = cache.NewSliceCache[models.WpComments](recentComments, vars.Conf.RecentCommentsCacheTime)
|
recentCommentsCaches = cache.NewSliceCache[models.WpComments](recentComments, vars.Conf.RecentCommentsCacheTime)
|
||||||
|
|
||||||
postCommentCaches = cache.NewMapCacheByFn[uint64, []models.WpComments](postComments, vars.Conf.CommentsCacheTime)
|
postCommentCaches = cache.NewMapCacheByFn[uint64, []models.WpComments](postComments, vars.Conf.CommentsCacheTime)
|
||||||
|
|
||||||
|
maxPostIdCache = cache.NewSliceCache[uint64](getMaxPostId, vars.Conf.MaxPostIdCacheTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClearCache() {
|
func ClearCache() {
|
||||||
|
@ -3,6 +3,7 @@ package common
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
"github/fthvgb1/wp-go/helper"
|
"github/fthvgb1/wp-go/helper"
|
||||||
"github/fthvgb1/wp-go/models"
|
"github/fthvgb1/wp-go/models"
|
||||||
"strings"
|
"strings"
|
||||||
@ -114,5 +115,22 @@ func searchPostIds(args ...any) (ids PostIds, err error) {
|
|||||||
ids.Ids = append(ids.Ids, posts.Id)
|
ids.Ids = append(ids.Ids, posts.Id)
|
||||||
}
|
}
|
||||||
ids.Length = total
|
ids.Length = total
|
||||||
|
if total > TotalRaw {
|
||||||
|
TotalRaw = total
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getMaxPostId(...any) ([]uint64, error) {
|
||||||
|
r, err := models.Find[models.WpPosts](models.SqlBuilder{{"post_type", "post"}, {"post_status", "publish"}}, "max(ID) ID", "", nil, nil, 0)
|
||||||
|
var id uint64
|
||||||
|
if len(r) > 0 {
|
||||||
|
id = r[0].Id
|
||||||
|
}
|
||||||
|
return []uint64{id}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetMaxPostId(ctx *gin.Context) (uint64, error) {
|
||||||
|
Id, err := maxPostIdCache.GetCache(ctx, time.Second)
|
||||||
|
return Id[0], err
|
||||||
|
}
|
||||||
|
@ -56,6 +56,11 @@ func Detail(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ID := uint64(Id)
|
ID := uint64(Id)
|
||||||
|
maxId, err := common.GetMaxPostId(c)
|
||||||
|
logs.ErrPrintln(err, "get max post id")
|
||||||
|
if ID > maxId || err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
post, err := common.GetPostAndCache(c, ID)
|
post, err := common.GetPostAndCache(c, ID)
|
||||||
if post.Id == 0 || err != nil {
|
if post.Id == 0 || err != nil {
|
||||||
return
|
return
|
||||||
|
@ -145,6 +145,9 @@ func (h *indexHandle) parseParams() {
|
|||||||
h.page = pa
|
h.page = pa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if common.TotalRaw > 0 && h.getTotalPage(common.TotalRaw) < h.page*h.page {
|
||||||
|
h.page = 1
|
||||||
|
}
|
||||||
if h.page > 1 && (h.category != "" || h.search != "" || month != "") {
|
if h.page > 1 && (h.category != "" || h.search != "" || month != "") {
|
||||||
h.setTitleLR(fmt.Sprintf("%s-第%d页", h.titleL, h.page), models.Options["blogname"])
|
h.setTitleLR(fmt.Sprintf("%s-第%d页", h.titleL, h.page), models.Options["blogname"])
|
||||||
}
|
}
|
||||||
|
@ -47,3 +47,5 @@ sleepTime: [1s,3s]
|
|||||||
maxRequestNum: 500
|
maxRequestNum: 500
|
||||||
# 单ip同时最大搜索请求数
|
# 单ip同时最大搜索请求数
|
||||||
singleIpSearchNum: 10
|
singleIpSearchNum: 10
|
||||||
|
# 文档最大id缓存时间
|
||||||
|
maxPostIdCacheTime: 1h
|
||||||
|
@ -54,7 +54,7 @@ func FlowLimit() func(ctx *gin.Context) {
|
|||||||
t := randFn(vars.Conf.SleepTime[0], vars.Conf.SleepTime[1])
|
t := randFn(vars.Conf.SleepTime[0], vars.Conf.SleepTime[1])
|
||||||
time.Sleep(t)
|
time.Sleep(t)
|
||||||
} else if flow > vars.Conf.MaxRequestNum {
|
} else if flow > vars.Conf.MaxRequestNum {
|
||||||
c.String(http.StatusForbidden, "请求太多了,服务器君压力山大中==!, 请稍后访问")
|
c.String(http.StatusForbidden, "请求太多了,服务器君表示压力山大==!, 请稍后访问")
|
||||||
c.Abort()
|
c.Abort()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -28,6 +28,7 @@ type Config struct {
|
|||||||
SleepTime []time.Duration `yaml:"sleepTime"`
|
SleepTime []time.Duration `yaml:"sleepTime"`
|
||||||
MaxRequestNum int64 `yaml:"maxRequestNum"`
|
MaxRequestNum int64 `yaml:"maxRequestNum"`
|
||||||
SingleIpSearchNum int64 `yaml:"singleIpSearchNum"`
|
SingleIpSearchNum int64 `yaml:"singleIpSearchNum"`
|
||||||
|
MaxPostIdCacheTime time.Duration `yaml:"maxPostIdCacheTime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mysql struct {
|
type Mysql struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user