背景
Redis作为一款性能优异的内存数据库,在互联网公司有着多种应用场景,下面介绍下Redis在京东到家的订单列表中的使用场景。主要从以下几个方面来介绍:
订单列表在Redis中的存储结构
- 订单列表数据在缓存中,是以用户的唯一标识作为键,以一个按下单时间倒序的有序集合为值进行存储的。大家都知道Redis的sorted set中每个元素都有一个分数,Redis就是根据这个分数排序的。订单有序集合中的每个元素是将时间毫秒数+订单号最后3位作为分数进行排序的。为什么不只用毫秒数作为分数呢?因为我们的下单时间只精确到秒,如果不加订单号最后3位,若同一秒有两个或两个以上订单时,排序分数就会一样,从而导致根据分数从缓存查询订单时不能保证唯一性。而我们的订单号的生成规则可以保证同一秒内的订单号的最后3位肯定不一样,从而可以解决上述问题。
- 有必要将一个用户的所有订单都放入缓存吗?针对用户订单是没有必要的,因为很少有用户去看很久以前的历史订单。真正的热点数据其实也就是最近下过的一些订单,所以,为了节省内存空间,只需要存放一个用户最近下过的N条订单就行了,这个N,相当于一个阀值,超过了这个阀值,再从数据库中查询订单数据,当然,这部分查库操作已经是很小概率的操作了。