提交 8ff38882 作者: 方治民

Merge remote-tracking branch 'source/master' into merge_dev

......@@ -18,6 +18,7 @@
<!-- prettier-ignore -->
- [开发规范说明](./doc/workflow.md)
- [技术栈说明](./doc/technique.md)
- [实用技巧](./doc/skill.md)
---
......
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
// hutool-crypto
implementation "cn.hutool:hutool-crypto:${hutoolVersion}"
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.common.config;
import cn.hutool.crypto.digest.DigestUtil;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.stereotype.Component;
/**
* Cache KeyGenerator
*
* @author Jim
* @version 0.1
* 2022/4/19 15:36
*/
@Slf4j
@Component
public class CacheKeyGenerator implements KeyGenerator {
@Override
@NonNull
public Object generate(Object target, Method method, Object... params) {
int len = params.length;
Map<String, Object> map = new HashMap<>(2 + len);
map.put("target", target.getClass().toGenericString());
map.put("method", method.getName());
for (int i = 0; i < len; i++) {
map.put("params-" + i, Objects.toString(params[i]));
}
return DigestUtil.sha256(map.toString());
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.common.config;
import java.time.Duration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis Config
*
* @author Jim
* @version 0.1
* 2022/4/19 15:27
*/
@EnableCaching
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setEnableTransactionSupport(false);
redisTemplate.setConnectionFactory(factory);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration
.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(5))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())
)
.disableCachingNullValues();
return RedisCacheManager.builder(connectionFactory).cacheDefaults(config).transactionAware().build();
}
}
......@@ -441,6 +441,15 @@ public final class Redis {
}
/**
* 获取所有 key
* @param pattern 查询规则
* @return 所有匹配的 Key 集合
*/
public Set<String> keys(String pattern) {
return redisTemplate.keys(pattern);
}
/**
* 返回最新的redis状态信息
*
* @return 信息
......
## 实用技巧
> Swagger 文档进行文件下载
```diff
# 将下载接口上的 @ApiOperation 注解中的 produces 属性值改为 application/octet-stream
- @ApiOperation(value = "文件下载")
+ @ApiOperation(value = "文件下载", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
```
> Redis 使用
```diff
+ @Resource
+ Redis redis;
+ Object value = redis.get(key);
```
> Excel 导入/导出,使用 [MyExcel](https://github.com/liaochong/myexcel) 工具库
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论