예제 #1
0
파일: topic.go 프로젝트: zeuson/gorevel
func GetTopics(page int, where string, order string, url string) ([]models.Topic, *Pagination) {
	if page < 1 {
		page = 1
		url = url[:strings.Index(url, "=")+1] + "1"
	}

	var topics []models.Topic
	var pagination *Pagination

	if page > models.CachePageSize {
		// 当前页超出缓存页,从数据库取数据
		topics, pagination = queryDb(page, where, order, url)

	} else {
		// 当前页在缓存中,从缓存中取数据
		if err := cache.Get("topics"+url, &topics); err != nil {
			// 缓存中没有找到,查数据库
			topics, pagination = queryDb(page, where, order, url)
			if len(topics) == 0 {
				return topics, pagination
			}
			// 写入缓存
			go cache.Set("topics"+url, topics, cache.FOREVER)
			go cache.Set("pagination"+url, pagination, cache.FOREVER)

		} else {
			// 从缓存中取分页
			if err := cache.Get("pagination"+url, &pagination); err != nil {
				revel.ERROR.Println(err)
			}
		}
	}

	return topics, pagination
}
예제 #2
0
파일: admin.go 프로젝트: zeuson/gorevel
func getCategories() []models.Category {
	var categories []models.Category
	if err := cache.Get("categories", &categories); err != nil {
		engine.Find(&categories)
		go cache.Set("categories", categories, cache.FOREVER)
	}

	return categories
}
예제 #3
0
파일: product.go 프로젝트: zeuson/gorevel
func getProducts() []models.Product {
	var products []models.Product
	if err := cache.Get("products", &products); err != nil {
		engine.Find(&products)
		go cache.Set("products", products, cache.FOREVER)
	}

	return products
}
예제 #4
0
파일: plugin.go 프로젝트: robfig/acvte
func SetSession(c *revel.Controller) {
	c.Session[SESSION_KEY] = c.Session.Id()
	s := Session{
		Id:        c.Session.Id(),
		Data:      "true",
		CreatedAt: time.Now(),
		UpdatedAt: time.Now(),
	}
	cache.Set(c.Session.Id()+SESSION_KEY, s, 30*time.Minute)
}
예제 #5
0
func (c App) Index() revel.Result {
	var widgets []models.Widget

	if err := cache.Get("widgets", &widgets); err != nil {
		log.Printf("Cache not working or first time request")
		widgets = models.GetWidgets()
		go cache.Set("widgets", widgets, cache.DEFAULT)
	}

	return c.Render(widgets)
}
예제 #6
0
파일: topic.go 프로젝트: zeuson/gorevel
func getReplies(id int64) []models.Reply {
	var replies []models.Reply
	str := strconv.Itoa(int(id))

	if err := cache.Get("replies"+str, &replies); err != nil {
		engine.Where("topic_id = ?", id).Find(&replies)
		go cache.Set("replies"+str, replies, cache.FOREVER)
	}

	return replies
}
예제 #7
0
func (c Restaurants) Index(restaurantName string) revel.Result {
	c.Validation.Required(restaurantName).Message("Restaurant name is required.")
	c.Validation.MinSize(restaurantName, 3).Message("Restaurant name is not long enough.")

	if c.Validation.HasErrors() {
		c.Validation.Keep()
		c.FlashParams()
		return c.Redirect(App.Index)
	}

	var restaurants []*models.Restaurant
	if err := cache.Get("restaurants_by_name_"+strings.ToLower(restaurantName), &restaurants); err != nil {
		restaurants = c.loadRestaurants(restaurantName)
		go cache.Set("restaurants_by_name_"+strings.ToLower(restaurantName), restaurants, 1*time.Minute)
	}

	return c.Render(restaurantName, restaurants)
}
예제 #8
0
파일: topic.go 프로젝트: zeuson/gorevel
// 帖子详细
func (c Topic) Show(id int64) revel.Result {
	topic := new(models.Topic)
	str := strconv.Itoa(int(id))

	if err := cache.Get("topic"+str, &topic); err != nil {
		has, _ := engine.Id(id).Get(topic)
		if !has {
			return c.NotFound("帖子不存在")
		}
		go cache.Set("topic"+str, topic, cache.FOREVER)
	}

	topic.Hits += 1
	engine.Id(id).Cols("hits").Update(topic)

	replies := getReplies(id)

	title := topic.Title
	return c.Render(title, topic, replies)
}