/
warm_up_search_cache.go
60 lines (48 loc) · 1.16 KB
/
warm_up_search_cache.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package main
import (
"github.com/boltdb/bolt"
"github.com/lebedev-yury/cities/cache"
"github.com/lebedev-yury/cities/ds"
"strings"
)
func warmUpSearchCache(db *bolt.DB, c *cache.Cache, locales []string, limit int) {
enRunes := strings.Split(
"a b c d e f g h i j k l m n o p q r s t u v w x y z", " ",
)
ruRunes := strings.Split(
"а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я", " ",
)
jobs := make(chan string, 1000)
results := make(chan string, 1000)
go worker(jobs, results, db, c, locales, limit)
jobsCount := 0
for _, rune := range enRunes {
jobsCount++
jobs <- rune
for _, secondRune := range enRunes {
jobsCount++
jobs <- rune + secondRune
}
}
for _, rune := range ruRunes {
jobsCount++
jobs <- rune
for _, secondRune := range ruRunes {
jobsCount++
jobs <- rune + secondRune
}
}
close(jobs)
for a := 1; a <= jobsCount; a++ {
<-results
}
}
func worker(
jobs <-chan string, results chan<- string,
db *bolt.DB, c *cache.Cache, locales []string, limit int,
) {
for query := range jobs {
ds.CachedCitiesSearch(db, c, locales, query, 5)
results <- query
}
}