3 Star 1 Fork 1

fufu66p / cache-fetch-later

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

使用方法:

Method to use:

1. 引入jar包

import the jar with maven

<dependency>
    <groupId>com.gitee.fufu669</groupId>
    <artifactId>cache-fetch-later</artifactId>
    <version>6.6.6025</version>
</dependency>

2. 在bootstrap.yml增加配置

add configuration in bootstrap.yml

redis:
  hostAndPorts: 166.66.6.166:6379,166.66.6.167:6379
  maxTotal: 200
  maxIdle: 200
  minIdle: 8
  maxWaitMillis: 3000
  testOnBorrow: true
  lifo: true
  testOnReturn: true
  password: zzzzzz
  keyPrefix: com.gitee.fufu669 
  #请更改上面这个keyPrefix,这个是在redis里面存入key时前面增加的前缀。

threadpooltaskexecutor:
  corepoolsize: 6
  maxpoolsize: 200
  queuecapacity: 100000
  keepaliveseconds: 60
  threadnameprefix: threadPoolTaskExecutor-
  #此框架用到了线程池。所以如果使用了自己的线程池,请在注入时,要用@Qualifier来区分.

3. 在springboot的application上面加上一个注解@EnableCacheFetchLater

add annotation @EnableCacheFetchLater on application.java of springboot

@EnableCacheFetchLater

4. 然后就可以在任意method上面使用上面使用下面4个标签。

Then you can use below 4 annotation on any method

@CacheFetchLater : redis里面有数据,就直接返回,并在加一把分布式锁后,起多线程更新数据。redis里面没有数据,就从方法里取数据,并存入redis。
                if redis has data, return value in redis and update value with multiple thread. if redis has no data, then get from method, set to redis. 
                有2个参数,
                refreshSeconds=30(默认是-1),意味着分布式锁的过期时间是30秒,意思是30秒内如果数据没有抓完成,是不允许再次重入的。如果已经完成还是允许继续抓数据的。如果值是-1或小于0,则不加分布式锁。
                expireSeconds=666666(默认是666666),意味着这个缓存过期时间是666666秒,也就是一周。
                lockSeconds=60(默认是60),更新缓存前加的分布式锁的过期时间,默认是60,意思是分布式锁60秒过期。
@CacheMockFetchLater : redis里面有数据,就直接返回,并起多线程更新数据。redis没有数据就返回一个新建对象,然后起多线程更新数据。
                if redis has data, return value in redis and update value with multiple thread. if redis has no data, return a new object of return type, then update value with backend thread.
                有3个参数:
                type=3(默认是3),缓存没有值时的处理 1:抛出异常 2:返回一个空对象 3:如果是List返回[],-1:其他值返回null。
                refreshSeconds=30(默认是-1),意味着分布式锁的过期时间是30秒,意思是30秒内如果数据没有抓完成,是不允许再次重入的。如果已经完成还是允许继续抓数据的。如果值是-1或小于0,则不加分布式锁。
                expireSeconds=666666(默认是666666),意味着这个缓存过期时间是666666秒,也就是一周。
                lockSeconds=60(默认是60),更新缓存前加的分布式锁的过期时间,默认是60,意思是分布式锁60秒过期。

@LockWithCache : 在方法上面加一把分布式锁。防止多线程多服务器重入。
                add a redis lock. to prevent multi thread or multi server to visit method at the same time.    
                有1个参数,
                expireSeconds=6(默认是6),意味着这个缓存过期时间是6秒。

@MockExecuteLater : 立即返回null,并起多线程执行。
                   return null and execute with background thread.
                   注意:spring注解功能在同一个类里互相调用是无效的。必须要用其他类的方法来调用加了注解的另一个方法

redis的key算法:配置的keyPrefix+":cacheKey:"+函数的类+方法名+所有参数的Json(除去没法序列化的)算出来的一个64位hash值(用sha256算法)。

然后Bean里面生成了一个cacheService可以直接使用的
@Autowired
private CacheService cacheService;

cacheService里面包含了所有jedis的方法,同时增加了getClassMethodValue和setClassMethodValue,和deleteClassMethodValue,和expireClassMethodValue,和ttlClassMethodValue来方便的操作前面的自动缓存

新增一个功能:用Controller类 implements com.gitee.fufu669.aspect.Logging会自动打印日志。

5. 工具类:

CacheAesUtil : Aes加密
CacheAopUtil : 切面工具
CacheDatetimeUtil : 日期工具
CacheDesUtil : Des加密
CacheExcelUtil : Excel工具用法
    List<ArrayList<String>> list = CacheExcelUtil.readXlsxOrXls(/*MultipartFile*/ file);
CacheHtmlUtil : 字符串操作工具
CacheHttpUtil : http连接工具
CacheJsonUtil : Json转化工具
CacheMapUtil : Map转化工具
CacheNetworkUtil : 网络工具
CachePasswordUtil : 密码工具
CacheRandomUtil : 随机工具
CacheRedisKeyUtil : 缓存关键字工具
CacheResponseUtil : 响应回复工具
CacheStringUtils : 字符串工具
CacheSwaggerToWikiUtil : 用法

    @Api(description = "swaggerUrl")
    @RestController
    @RequestMapping(value = "/v1/page/swagger/to/wiki", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @SuppressWarnings({"rawtypes", "unused", "unchecked"})
    public class PageSwaggerToWikiController implements Logging {
        public static final Logger logger = LoggerFactory.getLogger(PageSwaggerToWikiController.class);
    
        @ApiOperation("下载地址在下面的Request URL里。选中后鼠标右键,转到,就能下载一个doc文档了。")
        @GetMapping(value = "/create/doc")
        public void info(
                @ApiParam(value = "serverUrl,比如你的swagger地址是http://192.168.22.183:5000/swagger-ui.html,那么这里就填入http://192.168.22.183:5000") @RequestParam(value = "serverUrl", required = false, defaultValue = "http://localhost:10666") String serverUrl,
                @ApiParam(value = "showServerUrl,用来展示在wiki中的服务器的路径,比如http://www.test.com") @RequestParam(value = "showServerUrl", required = false, defaultValue = "http://localhost:10666") String showServerUrl,
                HttpServletRequest request,
                HttpServletResponse response
        ) {
            CacheSwaggerToWikiUtil.info(serverUrl,showServerUrl,request,response);
        }
    }
    
CacheTableUtil : mybatisGenerator的表工具
CacheXmlUtil : 对象和xml互转工具

6. 更改日志

详细见git日志.

空文件

简介

通用的springboot缓存注解。十分方便使用。Annotation Cache , very easy to use. 展开 收起
Java 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/fufu669/cache-fetch-later.git
git@gitee.com:fufu669/cache-fetch-later.git
fufu669
cache-fetch-later
cache-fetch-later
master

搜索帮助