top.lww0511:redis-lock

This is a Java Project that can prevent repeat http request. With Annotation and AOP,  it is very easy and no invade.

License

License

Categories

Categories

Redis Data Databases
GroupId

GroupId

top.lww0511
ArtifactId

ArtifactId

redis-lock
Last Version

Last Version

1.0.8
Release Date

Release Date

Type

Type

jar
Description

Description

top.lww0511:redis-lock
This is a Java Project that can prevent repeat http request. With Annotation and AOP,  it is very easy and no invade.
Project URL

Project URL

https://github.com/LerDer/redis-lock
Source Code Management

Source Code Management

https://github.com/LerDer/redis-lock

Download redis-lock

How to add to project

<!-- https://jarcasting.com/artifacts/top.lww0511/redis-lock/ -->
<dependency>
    <groupId>top.lww0511</groupId>
    <artifactId>redis-lock</artifactId>
    <version>1.0.8</version>
</dependency>
// https://jarcasting.com/artifacts/top.lww0511/redis-lock/
implementation 'top.lww0511:redis-lock:1.0.8'
// https://jarcasting.com/artifacts/top.lww0511/redis-lock/
implementation ("top.lww0511:redis-lock:1.0.8")
'top.lww0511:redis-lock:jar:1.0.8'
<dependency org="top.lww0511" name="redis-lock" rev="1.0.8">
  <artifact name="redis-lock" type="jar" />
</dependency>
@Grapes(
@Grab(group='top.lww0511', module='redis-lock', version='1.0.8')
)
libraryDependencies += "top.lww0511" % "redis-lock" % "1.0.8"
[top.lww0511/redis-lock "1.0.8"]

Dependencies

compile (5)

Group / Artifact Type Version
org.springframework.boot : spring-boot-starter-web jar 2.2.6.RELEASE
org.springframework.boot : spring-boot-starter-data-redis jar 2.2.6.RELEASE
org.springframework.boot : spring-boot-starter-aop jar 2.2.6.RELEASE
org.projectlombok : lombok Optional jar 1.18.12
com.alibaba : fastjson jar 1.2.72

Project Modules

There are no modules declared in this project.

redis-lock

This is a Java Project that can prevent repeat http request. With Annotation and AOP,  it is very easy and no invade.

使用方式

要配置Redis

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0

加入依赖

<dependency>
    <groupId>top.lww0511</groupId>
    <artifactId>redis-lock</artifactId>
    <version>1.0.4</version>
</dependency>

在方法上添加注解 Lock

@Lock(value = 10, distributed = false, hard = true)
@GetMapping(value = "/hi", name = "log")
public HttpResult hello() {
    return HttpResult.success("Hello");
}
  • @Lock:默认的,表示分布式,锁定时间3秒,非强制模式
  • @Lock(value = 10, distributed = false, hard = true):表示不是分布式的,锁定时间10秒,且是强制模式。

其实不是特殊需求,一般一个@Lock就够了。

效果

非分布式绑定了IP,并且是强制模式,虽然执行完了,方法还是不能访问的。

当只有一个@Lock

没有绑定IP,且虽然锁定时间3秒,但是方法执行完毕,自动释放了。

最后

其中还有一些工具类,全局异常拦截器等等,还有META-INF/spring.factories。(全局异常拦截器已删除,自己配置更灵活)

这个已经发布到Maven中心仓库了,所以直接添加依赖就可以使用了。不需要自己打包发布到私服。

  • 坐标
<!-- https://mvnrepository.com/artifact/top.lww0511/redis-lock -->
<dependency>
    <groupId>top.lww0511</groupId>
    <artifactId>redis-lock</artifactId>
    <version>1.0.4</version>
</dependency>

修改

版本改为 1.0.4

新增了缓存功能,基于 AOP + Redis 实现缓存方法结果。

使用方式

在方法上添加注解@Cache,默认 value = 1,单位是分钟,可使用下面方式自定义时间单位

@Cache(value = 10, unit = TimeUnit.HOURS)

效果

  1. 如果参数是普通的参数

缓存key为:cacheKey:CACHE_IN_REDIS_com.ler.demo.controller.HelloController.hello_namehahah

  1. 如果参数是使用 @RequestBody 注解

缓存key为:cacheKey:CACHE_IN_REDIS_com.ler.demo.controller.HelloController.hello1_userUser(name=demoData)

修改

由于修改为在Redis中使用Hash格式存储接口返回数据

所以Cache注解只保留了一个属性

/**
 * @return true 在日志中使用hashcode来记录,
 * 否则使用字符串的方式,主要是为了安全
 */
boolean value() default true;

增加了Change注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Change {

    /**
     * @return 缓存产生的类的全限定名,多个用逗号(,)分隔,
     * 不设置 则为当前方法所在的类的全限定名
     */
    String value() default "";
}

在会造成数据库数据发生改变的接口上添加此注解,可以删除Redis中查询方法的返回结果。保证数据一致性

欢迎大家关注我的公众号,共同学习,一起进步。加油 🤣

搜索:南诏Blog

Versions

Version
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1