utilizza SCAN
This commit is contained in:
parent
0c9c9710ce
commit
a6a959427d
10 changed files with 190 additions and 21 deletions
56
producer.go
56
producer.go
|
@ -3,7 +3,6 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -26,6 +25,59 @@ func producer() {
|
|||
conn := dbs.rdb.Get()
|
||||
defer conn.Close()
|
||||
|
||||
val := "0"
|
||||
|
||||
loop := true
|
||||
|
||||
start := time.Now()
|
||||
users := make(map[string]bool)
|
||||
for loop {
|
||||
|
||||
status = _Producer
|
||||
|
||||
retval, err := redis.Values(conn.Do("SCAN", val, "COUNT", strconv.Itoa(opts.MaxBulk)))
|
||||
|
||||
keys, _ := redis.Strings(retval[1], err)
|
||||
|
||||
for _, key := range keys {
|
||||
user := key[:strings.Index(key, "@")]
|
||||
users[user] = true
|
||||
}
|
||||
|
||||
val, _ = redis.String(retval[0], err)
|
||||
|
||||
if opts.Debug {
|
||||
fmt.Println(val, len(users))
|
||||
}
|
||||
|
||||
if val == "0" {
|
||||
loop = false
|
||||
}
|
||||
}
|
||||
|
||||
if opts.Debug {
|
||||
fmt.Printf("\nKEYS: %+v\n", time.Since(start))
|
||||
}
|
||||
|
||||
max := 0
|
||||
block := make([]string, 0)
|
||||
for user, _ := range users {
|
||||
block = append(block, user)
|
||||
if max >= opts.MaxBulk {
|
||||
wg.Add(1)
|
||||
mget_chan <- block
|
||||
max = 0
|
||||
block = make([]string, 0)
|
||||
continue
|
||||
}
|
||||
max += 1
|
||||
}
|
||||
|
||||
done <- true
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
keys, err := redis.Strings(conn.Do("KEYS", "*"))
|
||||
|
||||
if err != nil {
|
||||
|
@ -114,4 +166,4 @@ func producer() {
|
|||
}
|
||||
|
||||
done <- true
|
||||
}
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue