redis 链表存数据,怎么给每个下标设置过期时间? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
godleon
V2EX    程序员

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

  •  
  •   godleon 2023-04-20 11:14:37 +08:00 2389 次点击
    这是一个创建于 909 天前的主题,其中的信息可能已经有所发展或是发生改变。

    详细需求

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

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

    list key + string key , 获取数据可以管道批量获取、string 可以设置过期时间。
    OldCarMan
        10
    OldCarMan  
       2023-04-20 17:41:51 +08:00
    一楼+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  
       2023-04-20 18:22:14 +08:00
    LostPrayers
        12
    LostPrayers  
       2023-04-20 18:57:37 +08:00
    如果是 java ,用 redisson 就行,已经封装好了
    lotusgrm
        13
    lotusgrm  
       2023-04-21 12:46:32 +08:00
    redis 中,list 类型的数据结构没办法直接给每个元素设置过期时间,不过可以借助于有序集合实现,把 list 中的元素作为 sorted set 的 member ,把当前时间戳作为成员的 score ,然后在需要删除元素的时候使用 zrangebyscore 命令查找过期成员,然后使用 zrem 删除过期的元素
    NoKey
        14
    NoKey  
       2023-04-21 17:03:37 +08:00
    1 楼的办法好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5450 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 08:02 PVG 16:02 LAX 01:02 JFK 04:02
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86