CouchDB 有没有类似 Redis 的过期功能?

5 投票
3 回答
3634 浏览
提问于 2025-04-16 19:22

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 个回答

2

不,这个是memcache/redis的功能。CouchDB是一个数据持久化的数据库。

3

好问题!简单来说,答案是“不是”,但还有另一个答案是mu

在CouchDB中,比较常见的做法是给记录(文档)添加一个expires_at的时间戳。接下来,创建一个按过期时间戳索引的视图。客户端会根据时间戳查询这个视图,要求时间戳的值要大于或等于现在的时间。这样就能得到所有有效文档的列表。

这就需要客户端的时钟要同步。如果你有一个中心的、权威的服务器(这种情况很常见),一个简单的同步方法就是让客户端去请求CouchDB,检查它的HTTP Date头信息。

8

不,CouchDB没有这个功能。

Redis使用了一种懒惰的方式来处理数据,它在检查键的时候才会删除那些过期的键,尽管这些键可能早就过期了。此外,正如@antirez提到的,Redis每秒会随机删除一部分过期的键,以控制数据库的大小。

如果CouchDB本身不支持这个功能,你可以在你的对象上加一层小的处理。可以添加一个过期字段,当你尝试获取对象时,确保这个过期时间是在未来。如果过期时间已经过去,就删除这些过期的对象。此外,由于被删除的对象必须保留(这样才能复制删除的操作),你还需要定期找到这些被删除的文档并清除它们

撰写回答