тестовое задание
Необходимо реализовать hot key-value хранилище в памяти без использования субд, а с использованием map. Основные требования:
- Данным объектом должен управлять 1 сервис.
- Количество read/write-ов может быть любым, поэтому надо реализовать многопоточность.
- Доступ должен быть потокобезопасным (map+mutex, либо sync.Map).
- При успешном считывании по ключу надо получить значение, а сама запись должна удаляться из данного объекта.
- Необходимо реализовать автоочистку объекта, несчитанные записи надо удалять из структуры по истечению 30 секунд.
- Удаление должно происходить с использованием каналов, а не с помощью итерации и поиска expired записей.
- Большим плюсом будет решение с использованием context.WithTimeout, а не time.After.
go get github.com/guzenok/go-memkvdb-example
go run github.com/guzenok/go-memkvdb-example/examples/service &
./examples/service/client.sh
kill %1
import (
db "github.com/guzenok/go-memkvdb-example"
)
memcache, err := db.New(30*time.Second, db.CreateMapStore())
key := []byte("index")
val := []byte("stored data")
err = memcache.Set(key, val)
val, err = memcache.Get(key)
см. Makefile
make test
make bench