redis - Redis中的级联删除

标签 redis nosql cascade

在我当前的项目中,我正在 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 做什么,也许这可能是另一个问题的主题。

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

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

关于redis - Redis中的级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866110/

相关文章:

每个缓存键的 Azure Redis 缓存统计信息

hadoop - 海量数据入门

nosql - 在 Elastic Search 上查询多级嵌套字段

python - 努力采取下一步如何存储我的数据

python - Haar级联跟踪多个球

MySQL:在唯一的复合键集上删除级联

mysql - 查看 MySQL Workbench 中级联删除的完整效果?

c# - 在 StackExchange.Redis 中维护 ConnectionMultiplexer 对象的正确方法是什么?

Redis 流限制

ruby-on-rails - 从 Ruby 到 Azure 的 Redis::TimeoutError