V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
godleon
V2EX  ›  程序员

redis 链表存数据,怎么给每个下标设置过期时间?

  •  
  •   godleon · 344 天前 · 1636 次点击
    这是一个创建于 344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    详细需求

    现在想往 redis 存数据, 首先数据是一条一条写入,Key 是相同的,想每次新增时追加 value ,但是每个 value 过期时间不同。

    14 条回复    2023-04-21 17:03:37 +08:00
    coderxy
        1
    coderxy  
       344 天前
    你可以用 zset ,把 score 设置为过期时间,自己代码检查过期删除
    godleon
        2
    godleon  
    OP
       344 天前
    @coderxy zset 会覆盖相同的 key 呀 , 比如第一次 zSet key1:value1, 第二次 zSet key1:value2
    Chinsung
        3
    Chinsung  
       344 天前
    存进去的时候 value 带个时间,每次写的时候把过期的节点删掉再存
    或者使用 subscribe ,应该也可以做到
    dqzcwxb
        4
    dqzcwxb  
       344 天前
    官方不提供对 zset hash set list 数据结构中每个元素单独设置过期时间的接口,只能通过其他方式实现例如 lua 扩展或者自行维护
    Haaaaaat
        5
    Haaaaaat  
       344 天前
    可不可以 把 key 带上时间,
    key1[时间 1]: value1, key1[时间 2]:value2
    Haaaaaat
        6
    Haaaaaat  
       344 天前
    错了 是 value 带上时间,score 为过期时间
    fgwmlhdkkkw
        7
    fgwmlhdkkkw  
       344 天前
    `key:0`, `key:1`, `key:2`...
    这样可以吗……
    cnoder
        8
    cnoder  
       344 天前
    就 1 楼的方法可以的,zadd + zrangebyscore 完全够用
    Red998
        9
    Red998  
       344 天前
    list 结构 + string 结构

    list key + string key , 获取数据可以管道批量获取、string 可以设置过期时间。
    OldCarMan
        10
    OldCarMan  
       344 天前
    一楼+1 ,具体伪代码:

    ```add: ```
    int expireSeconds=3600;
    ZADD myDataZset (now1+expireSeconds) member1;

    ```get and remove: ```
    long timeLimit1=ZSCORE myDataZset member1 ;
    if(timeLimit1-now2<0){
    ZREM myDataZset member1
    }

    如果你 #2 楼说的 key1 是指一个 set 里可能存在 value 相同的 member 的话,你可以在添加时给每个 value 添加一个唯一标识(比如 hash )?
    1018ji
        11
    1018ji  
       344 天前
    LostPrayers
        12
    LostPrayers  
       344 天前
    如果是 java ,用 redisson 就行,已经封装好了
    lotusgrm
        13
    lotusgrm  
       343 天前
    redis 中,list 类型的数据结构没办法直接给每个元素设置过期时间,不过可以借助于有序集合实现,把 list 中的元素作为 sorted set 的 member ,把当前时间戳作为成员的 score ,然后在需要删除元素的时候使用 zrangebyscore 命令查找过期成员,然后使用 zrem 删除过期的元素
    NoKey
        14
    NoKey  
       343 天前
    1 楼的办法好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2626 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:32 · PVG 23:32 · LAX 08:32 · JFK 11:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.