本文整理汇总了Golang中github.com/bradfitz/gomemcache/memcache.Client类的典型用法代码示例。如果您正苦于以下问题:Golang Client类的具体用法?Golang Client怎么用?Golang Client使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Client类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: GetPaste
func GetPaste(params martini.Params, ren render.Render, r *http.Request, cf *swift.Connection, mc *memcache.Client) {
cachedPaste, err := mc.Get(params["pasteid"])
format := params["format"]
if err != nil {
log.Println(err)
}
var paste Paste
paste.PasteId = params["pasteid"]
if cachedPaste == nil {
log.Println("Asking swift for ", params["pasteid"])
cfPaste, err := cf.ObjectGetBytes("go-cfpaste", params["pasteid"])
if err != nil {
if err.Error() == "Object Not Found" {
ren.HTML(404, "404", paste)
return
} else {
log.Println(err)
ren.Error(500)
return
}
}
err = json.Unmarshal(cfPaste, &paste)
PanicIf(err)
} else {
log.Println("Cache hit for ", params["pasteid"])
err = json.Unmarshal(cachedPaste.Value, &paste)
PanicIf(err)
}
if format == "json" {
ren.JSON(200, paste)
} else {
ren.HTML(200, "paste", paste)
}
return
}
示例2: SessionGet
// 获取 Session, 如果找不到返回 frontend.ErrNotFound.
func SessionGet(token *SessionToken) (*Session, error) {
if token == nil {
return nil, errors.New("nil SessionToken")
}
var (
memcacheClient *memcache.Client
memcacheItemKey string
)
if token.Authenticated {
memcacheClient = mc.Client()
memcacheItemKey = mc.SessionCacheKey(token.SessionId)
} else {
memcacheClient = secondarymc.Client()
memcacheItemKey = secondarymc.SessionCacheKey(token.SessionId)
}
item, err := memcacheClient.Get(memcacheItemKey)
if err != nil {
if err == memcache.ErrCacheMiss {
err = frontend.ErrNotFound
}
return nil, err
}
var ss Session
if err = json.Unmarshal(item.Value, &ss); err != nil {
return nil, err
}
return &ss, nil
}
示例3: workerGetSetOrg
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)
}
}
}
示例4: workerSetOrg
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)
}
}
示例5: workerGetMissOrg
func workerGetMissOrg(client *memcache_org.Client, wg *sync.WaitGroup, ch <-chan int, stats *Stats) {
defer wg.Done()
for _ = range ch {
n := rand.Intn(*itemsCount)
keyStr := fmt.Sprintf("miss_%s_%d", key, n)
startTime := time.Now()
if _, err := client.Get(keyStr); err != memcache_org.ErrCacheMiss {
stats.errorsCount++
continue
}
stats.cacheMissCount++
updateResponseTimeHistogram(stats, startTime)
}
}
示例6: initQueue
func initQueue() {
var mc *memcache.Client
conn := utils.Addrcat(host, port)
mc = memcache.New(conn)
err := mc.Add(&memcache.Item{Key: topicName, Value: []byte{}})
if err != nil {
log.Printf("add error: %v", err)
}
fullLineName := topicName + "/" + lineName
err = mc.Add(&memcache.Item{Key: fullLineName, Value: []byte{}})
if err != nil {
log.Printf("add error: %v", err)
}
}
示例7: setTestSingle
func setTestSingle(ch chan bool, mc *memcache.Client, cn, n int) {
var err error
v := make([]byte, dataSize)
for i := 0; i < n; i++ {
start := time.Now()
err = mc.Set(&memcache.Item{Key: topicName, Value: v})
if err != nil {
log.Printf("set error: c%d %v", cn, err)
} else {
end := time.Now()
duration := end.Sub(start).Seconds()
log.Printf("set succ: %s spend: %.3fms", topicName, duration*1000)
}
}
ch <- true
}
示例8: SetCachedRequest
// Store the result of an API request in memcached.
func SetCachedRequest(m *memcache.Client, key string, value *ApiResult) {
// Don't cache errors
if value.Success == 0 {
return
}
result_json, err := json.MarshalIndent(value, "", " ")
if err != nil {
log.Println(err)
}
m.Set(
&memcache.Item{
Key: key,
Value: result_json,
Expiration: 600,
},
)
}
示例9: GetCachedRequest
// Fetches a previously cached API request from memcached, or returns false if
// none exists. Values should only have been set using the CacheSetRequest
// method, and so should be value JSON consisting of a result encapsulated by
// an ApiResult struct.
func GetCachedRequest(memcache *memcache.Client, key string) (bool, []byte) {
// Try and retrieve the serialized data
cached_json, err := memcache.Get(key)
if err != nil {
// Errors are cache misses
return false, nil
}
return true, cached_json.Value
}
示例10: getTestSingle
func getTestSingle(ch chan bool, cn, n int) {
var mc *memcache.Client
conn := utils.Addrcat(host, port)
key := topicName + "/" + lineName
keys := []string{key, "id"}
mc = memcache.New(conn)
for i := 0; i < n; i++ {
start := time.Now()
items, err := mc.GetMulti(keys)
if err != nil {
log.Printf("get error: c%d %v", cn, err)
} else {
end := time.Now()
duration := end.Sub(start).Seconds()
id := string(items["id"].Value)
log.Printf("get succ: %s spend: %.3fms", id, duration*1000)
}
}
ch <- true
}
示例11: precreateItemsOrg
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)
}
}
示例12: SavePaste
func SavePaste(paste Paste, ren render.Render, r *http.Request, cf *swift.Connection, mc *memcache.Client) {
paste.PasteId = genPasteId()
payload, _ := json.Marshal(paste)
seconds, err := getTTL(paste.PasteTtl)
PanicIf(err)
headers := swift.Headers{}
now := time.Now()
pasteIndex := 9999999999 - now.Unix()
indexKey := fmt.Sprintf("cfpaste-%d", pasteIndex)
headers["x-object-meta-pastetype"] = paste.PasteType
headers["x-object-meta-pasteid"] = paste.PasteId
headers["x-object-meta-pasteindex"] = fmt.Sprintf("%d", pasteIndex)
if seconds != 0 {
headers["x-delete-after"] = fmt.Sprintf("%d", seconds)
}
buf := bytes.NewBuffer(payload)
_, err = cf.ObjectPut("go-cfpaste", paste.PasteId, buf, true, "", "application/json; charset=utf-8", headers)
PanicIf(err)
// gholt's listing index hack so that he can spy on pastes
_, err = cf.ObjectPut("go-cfpaste", indexKey, bytes.NewBuffer([]byte("")), true, "", "application/json; charset=utf-8", headers)
PanicIf(err)
mc.Set(&memcache.Item{Key: paste.PasteId, Value: payload})
ren.JSON(200, map[string]interface{}{"pasteid": paste.PasteId})
}