应用场景:
该配置类可用于会员邀请码,时效性储存优惠券信息,时效性试用期功能,限时分享码活动推广等场景
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.springframework.stereotype.Component;
@Component
public class ShareCodeConfig {
private Map<String, String> shareCodes = new HashMap<>();
// 生成一个新的分享码,并设置有效时间
public String generateShareCode(String information) {
String shareCode = generateUniqueShareCode();
shareCodes.put(shareCode, information);
// 设置分享码有效时间(这里设置为10分钟)
final long expirationTimeInMillis = System.currentTimeMillis() + 10 * 60 * 1000;
// 定时任务,在有效时间过后移除分享码
Thread removeTask = new Thread(() -> {
try {
Thread.sleep(expirationTimeInMillis - System.currentTimeMillis());
shareCodes.remove(shareCode);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
removeTask.start();
return shareCode;
}
// 根据分享码获取对应的信息
public String getInformationByShareCode(String shareCode) {
return shareCodes.get(shareCode);
}
// 生成唯一的4位分享码
private String generateUniqueShareCode() {
String shareCode;
do {
shareCode = generateRandomShareCode();
} while (shareCodes.containsKey(shareCode));
return shareCode;
}
// 生成随机的4位分享码
private String generateRandomShareCode() {
return UUID.randomUUID().toString().substring(0, 4);
}
}
解析:上述代码中,ShareCodeConfig
类用于生成、存储和获取分享码和对应的信息。generateShareCode
方法用于生成一个新的分享码,并设置有效时间。getInformationByShareCode
方法用于通过分享码获取对应的信息。在generateShareCode
方法中,还会为每个生成的分享码启动一个定时任务,在有效时间过后自动删除分享码。