Как кешировать файлы в golang?

Я хочу закешировать определённые файлы при загрузке, что б при запросе быстро их отдавать. В итоге придумал костыльный код, что б при загрузке создавались переменные и заполнялись значениями из соответственных файлов, а потом пользователю, при обращении-выдавалась соответственная переменная. Получился довольно длинный однообразный код (пока его даже в цикл для автоматизации не внёс). Как вариант думаю создать цикл, который брал-бы название переменной и путь к файлу из файла например(либо внутри сгенерированного файла прописать) и в цикле будет создаваться переменная и заполняться значением из файла. Или это вариант не очень? Вопрос- есть ли уже что-то готовое, что б кешировать файлы.
  • Вопрос задан
  • 615 просмотров
Пригласить эксперта
Ответы на вопрос 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
Если направление web - используйте nginx-овский кэш файлов и на go это писать не нужно.
Если же нужно именно на go:
Создайте структуру с приватным отображением ( ключи - имена файлов, значения - их данные ) внутри и RW мютексом + выполняйте блокировки в случае чтения/записи. При этом запись выполняйте в момент инициализации приложения.

----upd----

type MapInterface interface {
	Has(key string) bool
	Set(key string, data []byte)
	Get(key string) (bool, []byte)
	Remove(key string)
}

type Map struct {
	sync.RWMutex

	data map[string][]byte
}


Так же посмотрите https://github.com/golang/groupcache/blob/master/l...

C nginx не работал.

C golang видимо тоже, вам нечего терять))

Сначала идёт проверка авторизации, а потом он отдаётся- т.е.

x-sendfile в помощь))
Ответ написан
Комментировать
@TwoRS Автор вопроса
C nginx не работал. Смысл ещё в том, что я не хочу выдавать этот закешированный файл всем. Сначала идёт проверка авторизации, а потом он отдаётся- т.е. nginx же не знает, кому можно отдавать, а кому нет. А можете привести пример Вашей реализации описанного на go, а то как-то очень расплывчато для меня. Читал, что nginx быстрее всех отдаёт файл, но стоит ли его запускать и добавлять в общий проект или скорость у go тоже быстрая и выигрыш небольшой?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы