blob: cba4dd447a19275525262aa64fc9a56bbc24ffad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package main
import (
"hash/fnv"
"sync"
)
type Shard struct{
mu sync.Mutex
id int
data map[string]Item
}
func (db *RedisDB) getShard(key string)*Shard{
hash := fnv.New64a()
hash.Write([]byte(key))
val := hash.Sum64()
return db.shards[val%16]
}
func (db *RedisDB) Execute(key string, fn func(*Shard) interface{}) interface{} {
shard := db.getShard(key)
shard.mu.Lock()
defer shard.mu.Unlock()
return fn(shard)
}
|