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