~/کدولاگ
→ بررسی اجمالی پروژه
ساخت یک کوتاه‌کننده لینک با 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 استفاده کنید — این یک مصالحه‌ی واقعی بین سرعت و داده است.

این پایان مجموعه است. حالا یک کوتاه‌کننده با مسیر نوشتنِ تمیز، مسیر خواندنِ کش‌شده، و آمارگیری غیرهمزمان دارید. آماده‌ی انتشار است.