04-25 19:51
电子科技大学 Java 人道洛阳花似锦:具体的工程落地应该是过期时间,注意到Zset的Score是双精度浮点数,那么可以实现:
整数存搜索次数,浮点数存时间戳,(搜索次数多的在上面,同样的,搜索次数相同的水平下,过期时间更久的在上面,因为这个数据”新鲜“);
这样再多开一个定时任务,几小时一次,把浮点数部分小于当前时间的数据清理出去;每次查询的时候,整数+1,浮点数时间戳为现在时间+过期时间,可能会有精度损失?烦请斧正;
也可以只是用一个Double的整数,把整数的前几位作为搜索次数,后几位作为时间戳,这里的时间戳完全可以选择分钟级的,这样的话,足够一个世纪的时间戳长度也不过是26Bit,剩余空间作为搜索次数,总之就是把一个数据按照一个规律分开,其中的数按照Bit分割直接通过二进制左移右移实现
PS:这里需要注意的时long和double之间的精度丢失问题,两者之间存在无损转换范围:
当long值在 −2^53 到 2^53 之间时,可无损转换为double(因为double的52位尾数能精确表示整数)正好B站目前最高播放位:1.2e,可以在27Bit内表示,26+27=53,刚刚好够用

0 点赞 评论 收藏
分享
2024-11-07 14:20
电子科技大学 Java 冬招进行时:springboot学完就差不多了,面试的话,数据库操作系统计算机网络这些基础问的比较多,要去大厂redis也要会,消息队列可以晚些学没关系(我是进了腾讯云智才学的)
0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: