Redis 如何实现Map的value过期呢?-灵析社区

万码IY9FEO6U

需求是这样的: 用户状态的数据结构 ``` 用户id: 用户状态(在线,禁言,限制登陆等),user:id:123 -> 0 ``` 开始我是把用户id直接用 set 进redis,最简单的数据结构,然后去更新对应的状态 后来需要统计在线用户,把id查到返回,似乎只能通过正则 user:id* 把相关的keys查到,然后代码中去判断状态是否是在线的 但是 user:id* 耗时太慢了,考虑换成map,这样直接定位到map,减少了 user:id* 这种匹配查询 又发现我的key是需要设置过期时间的,user:id:123 不是一直有效的,map又不能设置value的过期时间 有点纠结,我感觉需要多个辅助数据结构来实现功能,有没有既能利用redis的过期时间,又能提高查询效率的办法?(感觉我可能需要这样一个容器结构,能把全部 user:id* 放到一起,这样查询效率高,然后我再去设置每个key的过期时间) 求指教

阅读量:191

点赞量:2

问AI
如果你只是用来统计用户在线人数的需求,V2EX 有个巧妙的方案,虽然不一定准确。 单独弄一个 db 来放这些信息,比如 A 请求过来后,设置一个 key,然后设置过期时间,每次请求过来都去设置(延长)过期时间。 SETEX KEY_NAME TIMEOUT VALUE 大概就是这个样子,然后需要统计在线人数的时候,使用 dbsize 即可。 这个方法来源于下面这个帖子,当然,帖子中有更多巧妙的方法,比如使用 zset 。
,
设置过期时间
,
挺好