Skip to content

Commit

Permalink
🐎 加入缓存
Browse files Browse the repository at this point in the history
  • Loading branch information
xhofe committed Dec 29, 2020
1 parent 02e665a commit bf3f741
Show file tree
Hide file tree
Showing 16 changed files with 270 additions and 138 deletions.
15 changes: 15 additions & 0 deletions bootstrap/cache.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package bootstrap

import (
"github.com/Xhofe/alist/conf"
"github.com/patrickmn/go-cache"
log "github.com/sirupsen/logrus"
"time"
)

func InitCache() {
if conf.Conf.Cache.Enable {
log.Infof("初始化缓存...")
conf.Cache=cache.New(time.Duration(conf.Conf.Cache.Expiration)*time.Minute,time.Duration(conf.Conf.Cache.CleanupInterval)*time.Minute)
}
}
1 change: 1 addition & 0 deletions bootstrap/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func start() {
log.Errorf("初始化阿里云盘出现错误,启动失败.")
return
}
InitCache()
InitCron()
server()
}
Expand Down
29 changes: 18 additions & 11 deletions conf.yml.example
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
info:
title: AList
site_url: http://localhost
logo:
title: AList #标题
site_url: http://localhost:5277 #前端地址
backend_url: http://localhost:5244 #后端地址
logo: "" #网站logo 如果填写,则会替换掉默认的
footer_text: Xhofe's Blog #网页底部文字
footer_url: https://www.nn.ci #网页底部文字链接
music_img: https://img.oez.cc/2020/12/19/0f8b57866bdb5.gif #预览音乐文件时的图片
server:
port: "5244"
search: true
static: dist
port: "5244" #程序监听端口
search: true #是否开启搜索接口,开启搜索之后密码和根目录都会失效,所以前端暂时不做搜索
static: dist #前端文件目录
cache:
cache: true #是否开启缓存
expiration: 5 #缓存失效时间(单位:分钟)
cleanup_interval: 10 #清理失效缓存间隔
refresh_password: password #手动清理缓存密码
ali_drive:
api_url: https://api.aliyundrive.com/v2
root_folder: root
token:
access_token:
api_url: https://api.aliyundrive.com/v2 #阿里云盘api,无需修改
root_folder: root #根目录
refresh_token: need
max_files_count: 3000
max_files_count: 3000
6 changes: 6 additions & 0 deletions conf/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ type Config struct {
Search bool `yaml:"search" json:"search"`//允许搜索
Static string `yaml:"static"`
} `yaml:"server"`
Cache struct{
Enable bool `yaml:"cache"`
Expiration int `yaml:"expiration"`
CleanupInterval int `yaml:"cleanup_interval"`
RefreshPassword string `yaml:"refresh_password"`
}
AliDrive struct{
ApiUrl string `yaml:"api_url"`//阿里云盘api
RootFolder string `yaml:"root_folder"`//根目录id
Expand Down
3 changes: 3 additions & 0 deletions conf/const.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package conf

import (
"github.com/patrickmn/go-cache"
"net/http"
)

Expand All @@ -10,6 +11,8 @@ var(
Con string
Client *http.Client
Authorization string

Cache *cache.Cache
)

var Conf = new(Config)
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ require (
github.com/leodido/go-urn v1.2.1 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/robfig/cron/v3 v3.0.0
github.com/sirupsen/logrus v1.7.0
github.com/ugorji/go v1.2.2 // indirect
Expand Down
3 changes: 3 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLD
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/patrickmn/go-cache v1.0.0 h1:3gD5McaYs9CxjyK5AXGcq8gdeCARtd/9gJDUvVeaZ0Y=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
Expand Down
118 changes: 0 additions & 118 deletions server/controllers.go

This file was deleted.

4 changes: 2 additions & 2 deletions server/common.go → server/controllers/common.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package server
package controllers

import "github.com/gin-gonic/gin"

Expand All @@ -19,4 +19,4 @@ func dataResponse(data interface{}) gin.H {
},
"data":data,
}
}
}
70 changes: 70 additions & 0 deletions server/controllers/get.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package controllers

import (
"fmt"
"github.com/Xhofe/alist/alidrive"
"github.com/Xhofe/alist/conf"
"github.com/gin-gonic/gin"
"github.com/patrickmn/go-cache"
log "github.com/sirupsen/logrus"
"strings"
)

func Get(c *gin.Context) {
var get alidrive.GetReq
if err := c.ShouldBindJSON(&get); err != nil {
c.JSON(200,metaResponse(400,"Bad Request"))
return
}
log.Debugf("get:%v",get)
// cache
cacheKey:=fmt.Sprintf("%s-%s","g",get.FileId)
if conf.Conf.Cache.Enable {
file,exist:=conf.Cache.Get(cacheKey)
if exist {
log.Debugf("使用了缓存:%s",cacheKey)
c.JSON(200,dataResponse(file))
return
}
}
file,err:=alidrive.GetFile(get.FileId)
if err !=nil {
c.JSON(200,metaResponse(500,err.Error()))
return
}
paths,err:=alidrive.GetPaths(get.FileId)
if err!=nil {
c.JSON(200,metaResponse(500,err.Error()))
return
}
file.Paths=*paths
if conf.Conf.Cache.Enable {
conf.Cache.Set(cacheKey,file,cache.DefaultExpiration)
}
c.JSON(200,dataResponse(file))
}

func Down(c *gin.Context) {
fileIdParam:=c.Param("file_id")
log.Debugf("down:%s",fileIdParam)
fileId:=strings.Split(fileIdParam,"/")[1]
cacheKey:=fmt.Sprintf("%s-%s","d",fileId)
if conf.Conf.Cache.Enable {
downloadUrl,exist:=conf.Cache.Get(cacheKey)
if exist {
log.Debugf("使用了缓存:%s",cacheKey)
c.Redirect(301,downloadUrl.(string))
return
}
}
file,err:=alidrive.GetFile(fileId)
if err != nil {
c.JSON(200, metaResponse(500,err.Error()))
return
}
if conf.Conf.Cache.Enable {
conf.Cache.Set(cacheKey,file.DownloadUrl,cache.DefaultExpiration)
}
c.Redirect(301,file.DownloadUrl)
return
}
68 changes: 68 additions & 0 deletions server/controllers/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package controllers

import (
"fmt"
"github.com/Xhofe/alist/alidrive"
"github.com/Xhofe/alist/conf"
"github.com/gin-gonic/gin"
"github.com/patrickmn/go-cache"
log "github.com/sirupsen/logrus"
)

func List(c *gin.Context) {
var list ListReq
if err := c.ShouldBindJSON(&list);err!=nil {
c.JSON(200, metaResponse(400,"Bad Request"))
return
}
log.Debugf("list:%v",list)
// cache
cacheKey:=fmt.Sprintf("%s-%s-%s","l",list.ParentFileId,list.Password)
if conf.Conf.Cache.Enable {
files,exist:=conf.Cache.Get(cacheKey)
if exist {
log.Debugf("使用了缓存:%s",cacheKey)
c.JSON(200, dataResponse(files))
return
}
}
var (
files *alidrive.Files
err error
)
if list.Limit == 0 {
list.Limit=50
}
if conf.Conf.AliDrive.MaxFilesCount!=0 {
list.Limit=conf.Conf.AliDrive.MaxFilesCount
}
if list.ParentFileId == "root" {
files,err=alidrive.GetRoot(list.Limit,list.Marker,list.OrderBy,list.OrderDirection)
}else {
files,err=alidrive.GetList(list.ParentFileId,list.Limit,list.Marker,list.OrderBy,list.OrderDirection)
}
if err!=nil {
c.JSON(200, metaResponse(500,err.Error()))
return
}
password:=alidrive.HasPassword(files)
if password!="" && password!=list.Password {
if list.Password=="" {
c.JSON(200, metaResponse(401,"need password."))
return
}
c.JSON(200, metaResponse(401,"wrong password."))
return
}
paths,err:=alidrive.GetPaths(list.ParentFileId)
if err!=nil {
c.JSON(200, metaResponse(500,err.Error()))
return
}
files.Paths=*paths
files.Readme=alidrive.HasReadme(files)
if conf.Conf.Cache.Enable {
conf.Cache.Set(cacheKey,files,cache.DefaultExpiration)
}
c.JSON(200, dataResponse(files))
}
2 changes: 1 addition & 1 deletion server/req_bean.go → server/controllers/req_bean.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package server
package controllers

import "github.com/Xhofe/alist/alidrive"

Expand Down
Loading

0 comments on commit bf3f741

Please sign in to comment.