Redis使用中的笔记
终于有机会在实际项目中使用redis了。代码review的过程中学到了很多,以后关于redis使用中需要注意的都记在这里
1.redis用完记得关闭. getJedis() 使用完了之后一定要释放连接。
2.善用redis的原子操作
比如我们规定卖10个产品,有2个窗口同时卖,用redis中一个string在进行计数。
每个窗口每次买卖数量不一定,假定是n。
如果我们用下面的逻辑(伪代码)
1.查询可卖数量 available=jedis.get("total")-jedis.get("key")
2.和n进行比较 n<=available
3.如果可以交易则进行交易 domission
4.修改可卖数量 jedis.incrby("key",n)
那么当第一个窗口进行第1,2,3步的时候,第二个窗口也开始执行任务,则会造成冲突,很可能卖出超过10个产品
所以应该用如下的逻辑
1.增加可用 count=jedis.incrby("key",n)
2.比较 count<=jedis.get("total")
3.交易 domission
用第二种方法中,incrby是原子操作,保证两个线程取到的都是加过之后的。这样就能避免了多线程造成的过度交易问题。
但是,当count>available时,我们不进行交易,不过此时我们必须将已经加上的计数去除,即再执行一次 jedis.decrby("key",n)
这样的方法,当第一个窗口要卖12个时,第二个窗口要卖1个。由于第一个窗口incr后,导致第二个窗口也超限而不卖。这样线程并发时两个都不会进行交易。
看起来不好,但是这样总好过超量交易造成严重后果。
这条看起来很简单,但是在是使用的过程中还是要注意

浙公网安备 33010602011771号