MCPcopy Index your code
hub / github.com/crossoverJie/distributed-redis-tool

github.com/crossoverJie/distributed-redis-tool @1.0.5

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.0.5 ↗ · + Follow
92 symbols 243 edges 19 files 22 documented · 24%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

distributed-redis-tool

Build Status codecov Maven Central

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 :zap:.

v1.0.3

  • Upgrade API.
  • Add Anation.
  • Improve performance :zap: .

Contact

Mail: crossoverJie@gmail.com

Distributed lock

Features

  • [x] High performance.
  • [x] No deadlock.
  • [x] Support Redis cluster, single.
  • [x] Non-blocking lock.
  • [x] blocking lock.
  • [x] Support connection pool.
  • [x] 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

  • [x] High performance.
  • [x] native API.
  • [x] Annation API.
  • [x] Support Redis cluster, single.
  • [x] 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 com.crossoverjie.distributed.intercept package.
@ComponentScan(value = "com.crossoverjie.distributed.intercept")

Native API:


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

Other apis:

@ControllerLimit

    @ControllerLimit
    public BaseResponse<OrderNoResVO> getOrderNoLimit(@RequestBody OrderNoReqVO orderNoReq) {
        BaseResponse<OrderNoResVO> res = new BaseResponse();
        res.setReqNo(orderNoReq.getReqNo());
        if (null == orderNoReq.getAppId()){
            throw new SBCException(StatusEnum.FAIL);
        }
        OrderNoResVO orderNoRes = new OrderNoResVO() ;
        orderNoRes.setOrderId(DateUtil.getLongTime());
        res.setCode(StatusEnum.SUCCESS.getCode());
        res.setMessage(StatusEnum.SUCCESS.getMessage());
        res.setDataBody(orderNoRes);
        return res ;
    }

Used for @RequestMapping.

@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>

@CommonLimit

@CommonLimit
public void anyMethod(){}

It can be used for any Methods.

Core symbols most depended-on inside this repo

build
called by 10
src/main/java/com/crossoverjie/distributed/lock/RedisLock.java
getConnection
called by 8
src/main/java/com/crossoverjie/distributed/lock/RedisLock.java
lockPrefix
called by 4
src/main/java/com/crossoverjie/distributed/lock/RedisLock.java
sleepTime
called by 4
src/main/java/com/crossoverjie/distributed/lock/RedisLock.java
limit
called by 3
src/main/java/com/crossoverjie/distributed/limit/RedisLimit.java
before
called by 2
src/main/java/com/crossoverjie/distributed/intercept/CommonAspect.java
getScript
called by 2
src/main/java/com/crossoverjie/distributed/util/ScriptUtil.java
limitRequest
called by 1
src/main/java/com/crossoverjie/distributed/limit/RedisLimit.java

Shape

Method 70
Class 22

Languages

Java100%

Modules by API surface

src/main/java/com/crossoverjie/distributed/lock/RedisLock.java12 symbols
src/test/java/com/crossoverjie/distributed/lock/RedisClusterLockTest.java11 symbols
src/main/java/com/crossoverjie/distributed/limit/RedisLimit.java10 symbols
src/test/java/com/crossoverjie/distributed/lock/RedisSingleTest.java9 symbols
src/test/java/com/crossoverjie/distributed/lock/RealRedisLockTest.java8 symbols
src/test/java/com/crossoverjie/distributed/lock/RealRedisClusterLockTest.java8 symbols
src/test/java/com/crossoverjie/distributed/limit/RedisLimitTest.java8 symbols
src/test/java/com/crossoverjie/distributed/limit/RedisLimitJedisJunitTest.java4 symbols
src/test/java/com/crossoverjie/distributed/limit/RedisLimitJedisClusterJunitTest.java4 symbols
src/test/java/com/crossoverjie/distributed/intercept/CommonAspectTest.java4 symbols
src/main/java/com/crossoverjie/distributed/intercept/WebIntercept.java4 symbols
src/main/java/com/crossoverjie/distributed/intercept/CommonAspect.java3 symbols

For agents

$ claude mcp add distributed-redis-tool \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page