目前想到的方案

  1. Redis List ,每个 element 对应一个 Hash Map
  2. 一个用 sync.RWMutex 实现共享锁的队列,每个 element 储存一个 Hash Map

但这两个还是得用 O(n)的时间复杂度去遍历,才能知道前面有多少个元素

[]{
    {"12345": true},
    {"23561": false},
    {"23562": false},
}

补充:业务场景储存的键本来就是有序的,且与创建时间相关。而值是一个 bool 值。感觉性能优化的难点还是在需要知道前面还有多少个键值对是先于他创建且没有被删除的,Redis List 的索引不会动态更新,因此没法在前面有成员被删除后知道前面实际还有多少个成员

举报· 415 次点击
登录 注册 站外分享
3 条回复  
sagaxu 初学 昨天 22:07
如果严格先入先出,可以设置一个自增 ID ,记录当前元素是第几个插入,再记录上一次取出的元素的 id ,相减就能算出前面有多少个元素
quickfox 初学 昨天 21:55
用 Hash 和 Sorted Set ,Hash 存 key 和 bool 值,再用 redis 的 soted list ,存 key ,时间作为分值, 添加:zadd zset_key "12345" {时间戳} 和 hset hash_key "12345" true 取第一个 key:zrange zset_key 0 0 删除指定的 key:zrem "12345" 和 hdel hash_key "12345"
sagaxu 初学 昨天 21:26
最差情况也就是内存里建 2 个索引,一个是 key 的,一个是时间的,读写都是 O(logN)
返回顶部