在我目前的项目中,我正在Redis上实现自动完成服务,因为我使用了这种方法(this article更广泛地描述了它):
1)用于存储我有散列的数据的转储,其中我将可搜索的对象作为值,例如
HSET data 1 "{\"name\":\"Kill Bill\",\"year\":2003}"
HSET data 2 "{\"name\":\"King Kong\",\"year\":2005}"
2)用于存储可用于搜索的所有可能的输入字符序列(我提前生成)我使用有序集合,如
ZADD search:index:k 0 1
ZADD search:index:ki 0 1
ZADD search:index:kil 0 1
ZADD search:index:kill 0 1
其中存储在有序集合中的值(在我的示例中为'1')是来自散列的数据的关键。因此,为了搜索一些数据(例如名称以'ki'开头),我们需要做两个步骤:
data_keys = REDIS.zrevrange('search:index:ki', 0, -1)
matching_data = REDIS.hmget(data, *data_keys)
我试图解决的问题 - 当我删除哈希值时,如何自动删除与哈希值相关的排序集中的所有数据?在关系数据库中,我可以对这种情况使用级联删除,但是如何在Redis中处理呢?
答案 0 :(得分:2)
你的设计对我来说很尴尬,我不确定你真正想要用Redis做什么,也许这可能是另一个问题的主题。
也就是说,为了解决您的问题,Redis确实提供了类似行为的级联删除行为。相反,如果您要删除哈希" 1",请从相关的排序集迭代前缀和ZREM
。
注意:不要使用Lua脚本执行此任务,因为它会生成密钥名称(即按前缀排序的集合),这违反了建议(不适用于集群)