【问题标题】:Deleting an element from redis list having stringified JSON as element of list in Node.js从具有字符串化 JSON 作为 Node.js 中列表元素的 redis 列表中删除元素
【发布时间】:2017-11-07 07:19:03
【问题描述】:

我想从 redis 中删除属于某个帖子的评论。我使用列表作为我的数据结构。我尝试使用 LREM 命令(Syntax: LREM Key count value),但我的值是一个字符串化的 JSON 对象。因此,要删除给定帖子的任何评论,每次我必须将整个 JSON 作为 LREM 中的值。 JSON 看起来像:

"{\"_id\":\"5935374b535\",\"作者\":{\"_id\":\"58382eae771\",\"user_id\":\"58382eae77149\",\" username\":\"hello_37\",,\"post_id\":{\"_id\":\"5919abd3b6a\",\"images\":[],\"description\":\"\", \"title\":\"测试帖\"},\"user_id\":\"58382eae77149d3d02204369\",\"mentions\":[\"cool comment5\"]\"is_approved\":true,\" text\":\" 酷评论5\",\"__v\":0}"

这可行,但不是一个好方法。我可以只使用评论的 id(_id)删除评论吗?我无法在使用列表中元素的完整值的其他 LREM 列表中找到任何删除命令。

【问题讨论】:

    标签: json node.js redis


    【解决方案1】:

    我建议将每个评论存储为单个实体,即创建如下键:POST:{userId}:{postId}:{commentId} 并将相应的值作为字符串。所以如果你想删除一个键,你可以简单地说del POST:{userId}:{postId}:{commentId}。这是O(1),而O(N)LREM。如果你想检索一个用户的所有帖子,那么keys POST:{userId}:* 将列出所有帖子在 redis 中的 cmets 键,同样对于一个帖子你可以说keys POST:{userId}:{postId}:*

    【讨论】:

    • 我的最终目标是获取给定帖子的所有 cmets。因此, user_id 似乎没有发挥任何作用。我将 post_id 存储为键,并将完整的评论对象以字符串形式存储为值。你能澄清一下你是如何从redis使用列表中删除一个字符串的评论吗?
    • 我根本没有使用列表。
    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2014-03-10
    • 2022-07-06
    • 2020-04-05
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多