ساخت یک کوتاهکننده لینک با Go
بخش ۴: ریدایرکت و کش
تبدیل کدها به مقصد با ریدایرکت ۳۰۱، شمارش بازدیدها بهصورت غیرهمزمان، و افزودن یک کش Redis جلوی Postgres.
مسیر خواندن جایی است که یک کوتاهکننده زنده میماند یا میمیرد — خیلی بیشتر از مسیر نوشتن فراخوانی میشود. بیایید سریعش کنیم.
ریدایرکت
func (s *Server) resolve(w http.ResponseWriter, r *http.Request) {
code := r.PathValue("code")
if target, ok := s.cache.Get(code); ok {
http.Redirect(w, r, target, http.StatusMovedPermanently)
return
}
target, err := s.repo.TargetByCode(r.Context(), code)
if err != nil {
http.NotFound(w, r)
return
}
s.cache.Set(code, target, time.Hour)
http.Redirect(w, r, target, http.StatusMovedPermanently)
}
شمارش بازدید بدون بلاک شدن
دیتابیس را در مسیر داغ بهروزرسانی نکنید. کد را در یک کانال بافردار قرار دهید و اجازه دهید یک worker پسزمینه افزایشها را دستهای انجام دهد.
یک
301بهشدت توسط مرورگرها کش میشود. اگر برای هر بازدید به آمار جداگانه نیاز دارید، از302استفاده کنید — این یک مصالحهی واقعی بین سرعت و داده است.
این پایان مجموعه است. حالا یک کوتاهکننده با مسیر نوشتنِ تمیز، مسیر خواندنِ کششده، و آمارگیری غیرهمزمان دارید. آمادهی انتشار است.