Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

crossoverJie/distributed-redis-tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

120 Commits

Repository files navigation

distributed-redis-tool

Build Status codecov Maven Central QQηΎ€

This is a simple distributed tools based on Redis.

Distributed lock

Distributed limiting

Visit this website for more information.

ChangeLog

v1.0.5

  • Fixed #9.
  • Optimization RedisCluster.

v1.0.4

  • Upgrade distributed lock API.
  • Support connection pool.
  • Improve distributed lock performance ⚑.

v1.0.3

  • Upgrade API.
  • Add Anation.
  • Improve performance ⚑ .

Contact

Mail: crossoverJie@gmail.com

Distributed lock

Features

  • High performance.
  • No deadlock.
  • Support Redis cluster, single.
  • Non-blocking lock.
  • blocking lock.
  • Support connection pool.
  • Suppport Spring4.x+.

Quick start

maven dependency:

<dependency>
 <groupId>top.crossoverjie.opensource</groupId>
 <artifactId>distributed-redis-tool</artifactId>
 <version>1.0.4</version>
</dependency>

Set bean:

@Configuration
public class RedisLockConfig {
 private Logger logger = LoggerFactory.getLogger(RedisLockConfig.class);
 
 
 @Autowired
 private JedisConnectionFactory jedisConnectionFactory;
 
 @Bean
 public RedisLock build() {
 RedisLock redisLock = new RedisLock.Builder(jedisConnectionFactory,RedisToolsConstant.SINGLE)
 .lockPrefix("lock_")
 .sleepTime(100)
 .build();
 return redisLock;
 }
}

Non-blocking lock:

 @Autowired
 private RedisLock redisLock ;
 public void use() {
 String key = "key";
 String request = UUID.randomUUID().toString();
 try {
 boolean locktest = redisLock.tryLock(key, request);
 if (!locktest) {
 System.out.println("locked error");
 return;
 }
 //do something
 } finally {
 redisLock.unlock(key,request) ;
 }
 }

Blocking lock

redisLock.lock(String key, String request);

Blocking lock, Custom block time

redisLock.lock(String key, String request,int blockTime);

Distributed limiting

Features

  • High performance.
  • native API.
  • Annation API.
  • Support Redis cluster, single.
  • Suppport Spring4.x+

Quick start

maven dependency:

<dependency>
 <groupId>top.crossoverjie.opensource</groupId>
 <artifactId>distributed-redis-tool</artifactId>
 <version>1.0.4</version>
</dependency>
  1. Set bean:
@Configuration
public class RedisLimitConfig {
 private Logger logger = LoggerFactory.getLogger(RedisLimitConfig.class);
 
 @Value("${redis.limit}")
 private int limit;
 
 @Autowired
 private JedisConnectionFactory jedisConnectionFactory;
 
 @Bean
 public RedisLimit build() {
 RedisLimit redisLimit = new RedisLimit.Builder(jedisConnectionFactory, RedisToolsConstant.SINGLE)
 .limit(limit)
 .build();
 return redisLimit;
 }
}
  1. Scan packages.
@ComponentScan(value = "com.crossoverjie.distributed.intercept")
# RedisLimitConfig's package
@ComponentScan(value = "xx.xxx.config")

Native API:

 	
 boolean limit = redisLimit.limit();
 if (!limit){
 res.setCode(StatusEnum.REQUEST_LIMIT.getCode());
 res.setMessage(StatusEnum.REQUEST_LIMIT.getMessage());
 return res ;
 }

Other apis:

@CommonLimit

@CommonLimit
@RequestMapping("/xx")
public void anyMethod(){}

@SpringControllerLimit

If you are using native Spring:

 @SpringControllerLimit(errorCode = 200,errorMsg = "request has limited")
 @RequestMapping("/createOptimisticLimitOrderByRedis/{sid}")
 @ResponseBody
 public String createOptimisticLimitOrderByRedis(@PathVariable int sid) {
 logger.info("sid=[{}]", sid);
 int id = 0;
 try {
 id = orderService.createOptimisticOrderUseRedis(sid);
 } catch (Exception e) {
 logger.error("Exception",e);
 }
 return String.valueOf(id);
 }

Spring xml:

 <mvc:interceptors>
 <mvc:interceptor>
 <mvc:mapping path="/**"/> 
 <bean class="com.crossoverjie.distributed.intercept.SpringMVCIntercept"/>
 </mvc:interceptor>
 </mvc:interceptors>

It can be used for any methods.

About

πŸ”’A simple distributed tools based on Redis.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /