通常可使用redis的list数据结构形成日志。但list仅支持对数量进行筛选。如获取近100条日志记录。无法实现获取近30天数据。
当然可以使用sorted set实现按天获取,但当日志数量不断增加时,sorted set的额外开销还是比较大的。为了高效满足需求,可使用两层list实现。
解决方法:在记录日志时,可将日志按天归档在不同的list当中,如2015年12月1日的数据归档在在key为20151201的list中。其中20151201为归档时间。然后额外设定一个用于保存归档时间的list。如key为archive,value为[20151202, 20151201],这样仅需要用lrange命令就可以从archive获取到近30天归档,然后去相应的list去访问具体数据。非常高效
下图为写日志的流程图