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%NumShards] } 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) }