有什么像memcached,但对于排序列表?

时间:2009-06-22 13:03:10

标签: sorting caching list memcached

我的情况是,我可以真正受益于像memcached这样的系统,但能够存储(按每个键)排序的元素列表,并通过添加值来修改列表。

例如:

something.add_to_sorted_list( 'topics_list_sorted_by_title', 1234, 'some_title')
something.add_to_sorted_list( 'topics_list_sorted_by_title', 5436, 'zzz')
something.add_to_sorted_list( 'topics_list_sorted_by_title', 5623, 'aaa')

然后我可以这样使用:

something.get_list_size( 'topics_list_sorted_by_title' )
// returns 3
something.get_list_elements( 'topics_list_sorted_by_title', 1, 10 )
// returns: 5623, 1234, 5436

必需的系统允许我轻松地在每个数组中获取项目数,并从数组中获取任意数量的值,并假设值是使用附加值排序的。

我希望描述清楚。问题相对简单:有没有这样的系统?

4 个答案:

答案 0 :(得分:6)

看看MongoDB。它使用内存映射文件,所以速度非常快,应该与MemCached的性能相当。

MongoDB是一个无架构的数据库,应该支持您正在寻找的内容(索引/排序)

答案 1 :(得分:4)

Redis支持列表和集合。你可以禁用磁盘保存并像Memcached一样使用它而不是用于将数据保存到磁盘的MongoDB。

答案 2 :(得分:3)

MongoDB适合。它具有索引的重要性,因此您可以按主题集合的标题添加索引,然后检索按索引排序的项目:

db.topics.ensureIndex({"title": 1})
db.topics.find().sort({"title": 1})

答案 3 :(得分:0)

为什么不在memcached中存储数组呢?至少在python和PHP中,memcached API支持这个(我认为python使用的是pickle但我不记得肯定)。

如果您需要永久数据存储或备份,memcacheDB使用相同的API。

基本的伪picthon示例:

获取存储数据 存储= cache.get(storedDataName)

如果您之前没有存储任何内容,

初始化列表 如果(存储==无):      存储= {}

---------------- 查找存储的项目

尝试:    alreadyHaveItem =存储[的ItemKey] 除了KeyError:    打印'没有结果缓存'

---------------- 添加新项目

for newItemsDict中的item:     stored [item] = newItems [item]

---------------- 将结果保存在缓存中 cache.set(storedDataName,存储,TTL)