【问题标题】:Cascade deletes in RedisRedis 中的级联删除
【发布时间】:2018-07-29 16:26:09
【问题描述】:

在我当前的项目中,我正在 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 中如何处理呢?

【问题讨论】:

    标签: redis nosql cascade


    【解决方案1】:

    您的设计对我来说似乎很尴尬,我不确定您实际上想用 Redis 做什么,也许这可能是另一个问题的主题。

    也就是说,为了解决您的问题,Redis 确实提供了类似“级联删除”的行为。相反,如果您要删除哈希“1”,请从相关的排序集中迭代前缀和ZREM

    注意:不要为此任务使用 Lua 脚本,因为它会生成键名(即按前缀排序的集合),这违反了建议(不适用于集群)

    【讨论】:

    • 感谢您的回答!至于常见的方法 - 你可以看到我在问题中提到的文章,还有更多细节为什么会这样做。
    • 这篇文章有些陈旧 ;) 如今,字典范围是一个更好的选择,更不用说 redisearch.io 这样做了,还有更多(披露:附属)
    • 我需要查看字典范围和重新搜索,谢谢!
    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 2010-09-07
    • 2019-02-16
    • 2015-04-24
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多