现在想往 redis 存数据, 首先数据是一条一条写入,Key 是相同的,想每次新增时追加 value ,但是每个 value 过期时间不同。
1
coderxy 2023-04-20 11:21:37 +08:00
你可以用 zset ,把 score 设置为过期时间,自己代码检查过期删除
|
2
godleon OP @coderxy zset 会覆盖相同的 key 呀 , 比如第一次 zSet key1:value1, 第二次 zSet key1:value2
|
3
Chinsung 2023-04-20 11:36:25 +08:00
存进去的时候 value 带个时间,每次写的时候把过期的节点删掉再存
或者使用 subscribe ,应该也可以做到 |
4
dqzcwxb 2023-04-20 11:39:11 +08:00
官方不提供对 zset hash set list 数据结构中每个元素单独设置过期时间的接口,只能通过其他方式实现例如 lua 扩展或者自行维护
|
5
Haaaaaat 2023-04-20 11:41:48 +08:00
可不可以 把 key 带上时间,
key1[时间 1]: value1, key1[时间 2]:value2 |
6
Haaaaaat 2023-04-20 11:43:56 +08:00
错了 是 value 带上时间,score 为过期时间
|
7
fgwmlhdkkkw 2023-04-20 11:45:20 +08:00
`key:0`, `key:1`, `key:2`...
这样可以吗…… |
8
cnoder 2023-04-20 14:29:24 +08:00
就 1 楼的方法可以的,zadd + zrangebyscore 完全够用
|
9
Red998 2023-04-20 14:36:58 +08:00
list 结构 + string 结构
list key + string key , 获取数据可以管道批量获取、string 可以设置过期时间。 |
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 )? |
11
1018ji 2023-04-20 18:22:14 +08:00
|
12
LostPrayers 2023-04-20 18:57:37 +08:00
如果是 java ,用 redisson 就行,已经封装好了
|
13
lotusgrm 2023-04-21 12:46:32 +08:00
redis 中,list 类型的数据结构没办法直接给每个元素设置过期时间,不过可以借助于有序集合实现,把 list 中的元素作为 sorted set 的 member ,把当前时间戳作为成员的 score ,然后在需要删除元素的时候使用 zrangebyscore 命令查找过期成员,然后使用 zrem 删除过期的元素
|
14
NoKey 2023-04-21 17:03:37 +08:00
1 楼的办法好
|