## Java代ç é¨å
### 1.16ä½ä¼æ ç ççæ
```java
/**
* 16ä½ä¼æ ç çæï¼æ¶é´æ³å8ä½+4ä½éæºæ°+ç¨æ·idå4ä½
*/
private String generateCouponCode(Long memberId) {
StringBuilder sb = new StringBuilder();
Long currentTimeMillis = System.currentTimeMillis();
String timeMillisStr = currentTimeMillis.toString();
sb.append(timeMillisStr.substring(timeMillisStr.length() - 8));
for (int i = 0; i < 4; i++) {
sb.append(new Random().nextInt(10));
}
String memberIdStr = memberId.toString();
if (memberIdStr.length() <= 4) {
sb.append(String.format("%04d", memberId));
} else {
sb.append(memberIdStr.substring(memberIdStr.length()-4));
}
return sb.toString();
}
```
### 2.redisç¸å
³ä»£ç
#### 1.redisConfig
```java
package com.macro.mall.security.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.CachingConfigurerSupport;
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.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
/**
* Redisé
置类(似乿²¡ç¨)
*/
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisSerializer