reimplementato usando i channels
This commit is contained in:
parent
ba85c9ecc9
commit
699a3aaae4
6 changed files with 222 additions and 155 deletions
30
producer.go
30
producer.go
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue