2017-05-14 17 views
0

私は、それぞれ100万、200万、300万の3つの要素を持っています。私はそれらをすべて同時に実行するようにredisに挿入し、合計実行時間は300万intの実行時間を超えないようにします。私はsync.Waitgroupを使ってみましたが、実行を高速化しません。ここに私の基本的なコードがあります。Redisに同時に挿入する

package main 

import (
    "log" 
    "strconv" 
    "time" 

    "gopkg.in/redis.v5" 
) 

func main() { 
    oneMillion := makeRange(1, 1000000) 
    twoMillion := makeRange(1000001, 3000000) 
    threeMillion := makeRange(3000001, 6000000) 
    elements := [][]int{oneMillion, twoMillion, threeMillion} 
    client := redis.NewClient(&redis.Options{ 
     Addr:   "localhost:6379", 
     Password:  "", 
     DB:   0, 
     DialTimeout: 60 * time.Second, 
     WriteTimeout: 60 * time.Second, 
     ReadTimeout: 60 * time.Second, 
     PoolTimeout: 60 * time.Second, 
    }) 
    pipeline := client.Pipeline() 
    for _, elem := range elements { 
     for i := 0; i < len(elem); i++ { 
      key := "KEY:" + strconv.Itoa(elem[i]) 
      val := "VAL:" + strconv.Itoa(elem[i]) 
      cmd := pipeline.Set(key, val, 0) 
      if cmd.Err() != nil { 
       log.Fatal("cmd error: ", cmd.Err()) 
      } 
     } 
     _, err := pipeline.Exec() 
     if err != nil { 
      log.Fatal("error: ", err) 
     } 
    } 
} 

func makeRange(min, max int) []int { 
    a := make([]int, max-min+1) 
    for i := range a { 
     a[i] = min + i 
    } 
    return a 
} 

答えて

0

redisの操作は多少なりともアトミックです。つまり、任意の時点で1つの操作だけがredisサーバー上で実行されます。理論的には、Redisサーバー上で300万回の操作を実行する場合、これらの操作はすべて連続して行われます。

関連する問題