排行榜设计(mysql)
排行榜设计
CREATE TABLE `t_daka_rank` (
`id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
`consumer_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ranking` int DEFAULT NULL COMMENT '排名',
`rank_status` int DEFAULT NULL COMMENT '与昨天比的名次变化',
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='大咖排名记录';
排名规则
用户得分做去重排序、每个用户的得分与排序名次对应,确保同分时,排名相同。
名次变化计算方式
根据上次排名、与这次的排名进行比较,1为上升1名,0为不变,-1为下降1名
ps: 值得注意的是,如果排名不做实时的,那么新加入的用户会暂时没有排名、名次等信息,直到生成下次排名。
数据存储
mysql记录每次排名生成的数据(如上面的表设计)
redis保存各个用户的id、与之对应的排名、名次,用于业务查询。
遇到的问题
当把LocalDateTime
类型的字段保存到redis,再取出来的时候会报序列化错误. 这是由于redis序列化的方式,和我们取出来反序列化的方式不一致产生的。
解决方式:加注解
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime createTime;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2020-08-04 java8 Stream()等特性的实操,即用即翻