最近有一个新的需求,为了提高性能,获取数据的途径由查库改为从redis中取
背景:考勤系统,某个员工可以看到本月的排班情况(考勤日历,有排班日期的在日历中显示),也可以查看具体某天的排班情况,这种需求实现起来本来可以通过两个独立的接口来实现,由于是基于别人开发过的代码基础之上修改,所以沿用了之前的方案,通过一个接口来实现该需求,通过传来的参数date日期的长度来判断是查询某个月的还是具体某一天的排班情况。
修改方案:用hash结构将数据存储到redis中,整体的key(外层的key)用员工号加精确到月份的时间来表示(例如:001-2012-01),hash中的小key(内层的key)用精确到日的时间来表示(例如:2012-01-01),小key对应的value则是该用户某日的具体排班数据。
存储成功后的数据结构如下:
技术难点:在redisTemplate中存储hash的方法对应的值为String类型,而我们需要的是List类型(或者自定义类型等等)
解决方案:将我们需要的类型的数据序列化后,存入到redis中,取值时再反序列化取出
相关技术:BoundHashOperations
核心代码:
取:
最终结论:实现了在redis中存取hash结构非S