最近项目遇到库存的问题,其实我是抵触的,因为在业务比较小的时候,设置一张表来表示实际库存和锁定库存就好了,但是呢,业务发展就是这样,保不准啥时候就突然增长了,你连反应都没有,系统就挂了。
如果用现在的消息队列,rabbitMQ或者activeMQ ,对于库存这样的数据操作,这个延时性,又是没有办法忍受的,所以想着自己redis实现一个MQ试试,因为redis还是支持原子性操作的,incrBy和decrBy在更新数据的时候,是一个不错的选择。
使用redis的List来实现消息队列,网上很多例子,这里就不详细说明了,其实我这里最主要的是,消息的可靠性处理。
关于唯一性表示的key的存储的integer的值,我使用了双key存储,使用空间来换取时间,主key存值,附属key存有效时间,每次读取主key值的时候读取附属key值