reimplementato usando i channels

This commit is contained in:
Miki 2015-11-20 15:23:12 +01:00
parent ba85c9ecc9
commit 699a3aaae4
6 changed files with 222 additions and 155 deletions

View file

@ -8,11 +8,17 @@ import (
"time"
)
func producer() {
type produced struct {
user string
logins []string
}
func producer(consume chan produced, done chan bool) {
conn := dbs.rdb.Get()
defer conn.Close()
for loop {
for {
start := time.Now()
// estrae un userid dalla lista degli utenti che hanno fatto login
user, err := redis.String(conn.Do("spop", "llindex"))
@ -26,9 +32,25 @@ func producer() {
log.Printf("LLINDEX empty: %v\n\r", err)
fmt.Printf("LLINDEX empty: %v\n\r", err)
}
break
done <- true
}
msgs <- user
// estrae tutti i login dell'utente "user"
logs, err := redis.Strings(conn.Do("lrange", user, "0", "-1"))
if err != nil {
fmt.Printf("LRANGE: %+v - %+v\n\r", err, logs)
log.Printf("LRANGE: %+v - %+v\n\r", err, logs)
}
if opts.Debug {
fmt.Printf("LRANGE: %s - %d\n\r", user, len(logs))
log.Printf("LRANGE: %s - %d\n\r", user, len(logs))
}
fmt.Printf("PROD: user=%s in %v - conn=%d\n\r", user, time.Since(start), dbs.rdb.ActiveCount())
consume <- produced{
user: user,
logins: logs,
}
}
}