首页 存档 技术 查看内容

redis分布式内存锁:余量扣除示例(上) Redisson客户端 余量扣除代码片段 下文接redis ...

2018-3-30 13:00 |来自: 互联网 365 0

摘要: 余量扣除,即在高并发,大用户下,每个用户的余量数据频繁发生变化。例如:12306的某车次票的余量,商品库存,短信余量账本等。 针对,此类频繁发生修改的原子类余量对象,采用mysql,oracle等数据,一定会存在操作瓶 ...

余量扣除,即在高并发,大用户下,每个用户的余量数据频繁发生变化。例如:12306的某车次票的余量,商品库存,短信余量账本等。

针对,此类频繁发生修改的原子类余量对象,采用mysql,oracle等数据,一定会存在操作瓶颈。本文拟采用内存的办法实现,使用redis Redisson客户端完成。当然,或许可以采用mangodb这类no-sql数据库。

Redisson客户端

https://github.com/mrniko/redisson/wiki

实现redis分布锁的客户端开源项目,redission支持4中连接redis方式,分别为单机,主从, Sentinel , Cluster 集群,并提供以下类库

1.AtomicLong原子操作

2.分布式List

3.分布式Set

4.分布式Map

5.分布式Queue,

6.分布式SortedSet,

7.分布式ConcureentMap

8.分布式Lock

9.分布式CountDownLatch

10. 分布式Publish / Subscribe, HyperLogLog等

余量扣除代码片段

resources/redis.properties

  1. #redis部署模式SingleHost1MasterSlave2Sentinel3Cluster4

  2. redis.deploymentModel=2

  3. redis.hosts=192.168.161.73:6379,192.168.161.129:6379

  4. redis.masterName=mymaster

  5. redis.masteAddress=192.168.161.73:6379

RedissonClient

  1. importjava.io.FileNotFoundException;

  2. importjava.io.IOException;

  3. importjava.util.Properties;

  4. importjava.util.concurrent.Future;

  5. importorg.redisson.Config;

  6. importorg.redisson.Redisson;

  7. importorg.redisson.connection.RandomLoadBalancer;

  8. importorg.redisson.core.RAtomicLong;

  9. importorg.redisson.core.RMap;

  10. /**

  11. *分布式锁客户端

  12. *@author

  13. *

  14. */

  15. publicclassRedissonClient{

  16. privatestaticRedissonClientinstance;

  17. privateRedissonClient(Stringfilename)throwsFileNotFoundException,IOException{

  18. init(filename);

  19. }

  20. publicstaticsynchronizedRedissonClientgetInstance(Stringfilename){

  21. if(instance==null){

  22. try{

  23. instance=newRedissonClient(filename);

  24. }catch(FileNotFoundExceptione){

  25. //TODOAuto-generatedcatchblock

  26. e.printStackTrace();

  27. }catch(IOExceptione){

  28. //TODOAuto-generatedcatchblock

  29. e.printStackTrace();

  30. }

  31. }

  32. returninstance;

  33. }

  34. publicstaticvoidmain(String[]args){

  35. RedissonClientclient=RedissonClient.getInstance("resources/redis.properties");

  36. Redissonredisson=client.getSingleClient("ip:6379");

  37. /*

  38. RMap

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部