func workerGetSetOrg(client *memcache_org.Client, wg *sync.WaitGroup, ch <-chan int, stats *Stats) { defer wg.Done() var item memcache_org.Item for _ = range ch { n := rand.Intn(*itemsCount) item.Key = fmt.Sprintf("%s_%d", key, n) startTime := time.Now() if rand.Float64() < *getRatio { _, err := client.Get(item.Key) if err == memcache_org.ErrCacheMiss { stats.cacheMissCount++ continue } if err != nil { stats.errorsCount++ continue } stats.cacheHitCount++ updateResponseTimeHistogram(stats, startTime) } else { item.Value = value if err := client.Set(&item); err != nil { stats.errorsCount++ continue } updateResponseTimeHistogram(stats, startTime) } } }
//Update captcha info func (store *MCStore) Update(key string, captcha *CaptchaInfo) bool { item := new(memcache.Item) item.Key = MC_KEY_PREFIX + key item.Value = store.encodeValue(captcha) err := store.mc.Set(item) if nil != err { log.Printf("update key in memcache err:%s", err) return false } else { return true } }
func workerSetOrg(client *memcache_org.Client, wg *sync.WaitGroup, ch <-chan int, stats *Stats) { defer wg.Done() var item memcache_org.Item for _ = range ch { n := rand.Intn(*itemsCount) item.Key = fmt.Sprintf("%s_%d", key, n) item.Value = value startTime := time.Now() if err := client.Set(&item); err != nil { stats.errorsCount++ continue } updateResponseTimeHistogram(stats, startTime) } }
// Put put value to memcache. func (rc *Cache) Put(key string, val interface{}, timeout time.Duration) error { if rc.conn == nil { if err := rc.connectInit(); err != nil { return err } } item := memcache.Item{Key: key, Expiration: int32(timeout / time.Second)} if v, ok := val.([]byte); ok { item.Value = v } else if str, ok := val.(string); ok { item.Value = []byte(str) } else { return errors.New("val only support string and []byte") } return rc.conn.Set(&item) }
//Add captcha info and get the auto generated key func (store *MCStore) Add(captcha *CaptchaInfo) string { key := fmt.Sprintf("%s%s%x", captcha.Text, randStr(20), time.Now().UnixNano()) key = hex.EncodeToString(md5.New().Sum([]byte(key))) key = key[:32] item := new(memcache.Item) item.Key = MC_KEY_PREFIX + key item.Value = store.encodeValue(captcha) err := store.mc.Add(item) if nil != err { log.Printf("add key in memcache err:%s", err) } return key }
func precreateItemsOrg(client *memcache_org.Client) { n := *itemsCount / *workersCount workerFunc := func(wg *sync.WaitGroup, start int) { defer wg.Done() item := memcache_org.Item{ Value: value, } for i := start; i < start+n; i++ { item.Key = fmt.Sprintf("%s_%d", key, i) if err := client.Set(&item); err != nil { log.Fatalf("Error in Client.Set(): [%s]", err) } } } var wg sync.WaitGroup defer wg.Wait() for i := 0; i < *workersCount; i++ { wg.Add(1) go workerFunc(&wg, i*n) } }