Мне интересно, какова лучшая стратегия для управления сроком действия связанных с сеансом данных, хранящихся в памяти типа Riak Bucket.
Похоже, что этот бэкэнд поддерживает ttl (http://docs.basho.com/riak/kv/2.2.3/setup/planning/backend/memory/#ttl и http://docs.basho.com/riak/kv/2.2.3/configuring/backend/#memory-backend),, однако документация по второй ссылке гласит:
"Как только время этого объекта истекло, оно будет удалено при следующем чтении
его ключ. "
Что если объект больше никогда не будет прочитан? Это останется в памяти? Однако я предполагаю, что в конечном итоге он будет уничтожен при достижении предела memory_backend.max_memory_per_vnode
.
Сохраняет ли метка времени истечения еще один важный вариант? В этом случае сокращение будет выполняться процессом, периодически ищущим «старые» временные метки:
:riakc_pb_socket.search(pid, "expirable_token", "exp_counter:[* TO 1542468475]")
# then we delete them
Я проверил это, сохранив отметку времени в счетчике, поскольку невозможно запросить регистры диапазона, которые проиндексированы как строки:
iex(34)> :riakc_counter.increment(System.system_time(:second), :riakc_counter.new())
{:counter, 0, 1542468373}
Однако я не уверен, что счетчики предназначены для хранения целых чисел. Как лучше хранить целые числа в типах данных Riak? Пользовательская схема с правильным объявленным типом int?