Есть ли у CouchDB эквивалент истечения срока действия Redis? - PullRequest
5 голосов
/ 11 июня 2011

Имеет ли CouchDB эквивалентный срок действия, как в Redis?

Пример истечения срока действия Redis:

#!/usr/bin/env python
import redis
redis_server = redis.Redis(host='localhost',port=5477,db=0)
r.set('cat','meow')
r.expire('cat',10)
# do some work and ten seconds later...
r.get('cat') # returns None

Ответы [ 3 ]

8 голосов
/ 12 июня 2011

Нет. У CouchDB этого нет.

Redis использует ленивый подход и удаляет ключи при их проверке, даже если срок их действия истек значительно раньше. Кроме того, как отметил @antirez, Redis будет удалять случайный набор ключей с истекшим сроком действия каждую секунду или около того, чтобы контролировать размер базы данных.

Если CouchDB изначально не поддерживает это, вы можете добавить крошечный слой поверх ваших объектов для выполнения этой работы. Добавьте поле срока действия и при попытке получить объекты убедитесь, что срок действия истекает в будущем. Если нет, удалите просроченные объекты. Кроме того, поскольку удаленные объекты должны сохраняться (чтобы можно было реплицировать действие удаления), вам также потребуется периодически находить удаленные документы и очищать их .

2 голосов
/ 12 июня 2011

Хороший вопрос!Простой ответ - «нет», но другой ответ - mu .

. Идиоматический подход CouchDB заключается в том, чтобы иметь в записях (документах) отметки времени expires_at.Далее есть представление, проиндексированное по метке времени истечения.Клиенты будут запрашивать представление, основанное на метке времени, при этом значение метки времени будет больше или равно текущему.Результатом будет список всех действительных документов.

Для этого необходимо синхронизировать часы клиентов.Если у вас есть один центральный, авторитетный сервер (очень распространенная ситуация), простой способ синхронизации заключается в том, что клиенты пингуют кушетку и проверяют ее заголовок HTTP Date.

2 голосов
/ 12 июня 2011

Нет.Это функция memcache / redis.CouchDB - это постоянная база данных.

...