需求是这样的:
用户状态的数据结构
用户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的过期时间)
求指教
好吧,我用的java,redission太强大了,有RMapCache可以实现map元素单独设置过期时间,文档 https://www.bookstack.cn/read... 看了文档找到了解决方案,其它语言的灵活发挥吧