GitHub轻松阅读微服务实战项目流程详解第三天:公共模块的设计与实现
Posted Roninaxious
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GitHub轻松阅读微服务实战项目流程详解第三天:公共模块的设计与实现相关的知识,希望对你有一定的参考价值。
Three Day
github地址:https://github.com/Zealon159/light-reading-cloud
该模块存放了一些公共的POJO类、工具类等
1.缓存
(1)账户中心缓存Key
public class RedisAccountKey {
/** 图书喜欢数缓存(hash) */
public final static String ACCOUNT_CENTER_BOOK_LIKES_COUNT = "account-center:book-likes-count";
}
(2)图书资源缓存Key
public class RedisBookKey {
/** 图书信息缓存 */
public static final String getBookKey(String bookId){
return String.format("book-center:detail-%s",bookId);
}
/** 资源中心图书章节缓存 */
public static final String getBookChapterKey(String bookId){
return String.format("book-center:chapter-%s",bookId);
}
/** 资源中心图书章节列表缓存 */
public static final String getBookChapterListKey(String bookId){
return String.format("book-center:chapter-list-%s",bookId);
}
/** 资源中心图书章节节点缓存 */
public static final String getBookChapterNodeKey(Integer bookId){
return String.format("book-center:chapter-node-%s",bookId);
}
/** 图书资源中心feign-client缓存 */
public static final class BookCenter {
/** 资源中心图书缓存 */
public static final String getFeignClientBookKey(String bookId){
return String.format("book-center:feign-client-book-%s",bookId);
}
}
}
(3)精品页缓存key
public class RedisHomepageKey {
/**
* 主页缓存Key
* @param type 类型1.主页 2.男生 3.女生
* @return
*/
public static final String getHomepageKey(Integer type){
return String.format("home-page:index-%s", type);
}
/** 主页Banner缓存Key */
public static final String getBannerVoKey(Integer bannerId){
return String.format("home-page:banner-vo-%s", bannerId);
}
/** 主页书单DB缓存Key */
public static final String getBooklistDbKey(Integer booklistId){
return String.format("home-page:booklist-db-%s", booklistId);
}
/** 主页书单缓存Key */
public static final String getBooklistVoKey(Integer booklistId){
return String.format("home-page:booklist-vo-%s", booklistId);
}
/** 主页书单随机缓存Key */
public static final String getBooklistRandomVoKey(Integer booklistId){
return String.format("home-page:booklist-random-vo-%s", booklistId);
}
/** 主页书单图书分页更多 */
public static final String getBooklistItemPagingKey(Integer booklistId){
return String.format("home-page:booklist-item-paging-%s", booklistId);
}
}
(4)Redis缓存有效时间工具类
/**
* Redis 缓存有效时间(单位:秒)
*/
public class RedisExpire {
// 1分钟
public static final long MINUTE = 60;
// 2分钟 60*2
public static final long MINUTE_TWO = 120;
// 3分钟 60*3
public static final long MINUTE_THR = 180;
// 5分钟 60*5
public static final long MINUTE_FIV = 300;
// 10分钟 60*10
public static final long MINUTE_TEN = 600;
// 20分钟
public static final long MINUTE_TWENTY = 1200;
// 30分钟 60*30
public static final long MINUTE_THIRTY = 1800;
// 1小时 60*60*1
public static final long HOUR = 3600;
// 2小时 60*60*2
public static final long HOUR_TWO = 7200;
// 4小时
public static final long HOUR_FOUR = 14400;
// 1天 60*60*24
public static final long DAY = 86400;
// 2天 60*60*24*2
public static final long DAY_TWO = 172800;
// 1周 60*60*24*7
public static final long WEEK = 604800;
// 1月 60*60*24*30
public static final long MONTH = 2592000;
// 1年 60*60*24*365
public static final long YEAR = 31536000;
}
(5)缓存操作类
/**
* cache 操作类
* @author zealon
*/
@Component
public class RedisService {
/** 日志 */
private static final Logger LOGGER = LoggerFactory.getLogger(RedisService.class);
/** 默认缓存时间(10分钟) */
public static final Long DEFAULT_CACHE_TIME = RedisExpire.MINUTE_TEN;
/** 操作字符串 */
private ValueOperations<String, String> valueOperations;
/** 操作hash */
private HashOperations hashOperations;
/** 操作list */
private ListOperations listOperations;
/** 操作set */
private SetOperations setOperations;
/** 操作有序set */
private ZSetOperations zSetOperations;
/** Redis模板 */
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
/**
* 构造方法初始化操作类
*/
@PostConstruct
private void inInit() {
valueOperations = stringRedisTemplate.opsForValue();
hashOperations = redisTemplate.opsForHash();
listOperations = stringRedisTemplate.opsForList();
setOperations = stringRedisTemplate.opsForSet();
zSetOperations = stringRedisTemplate.opsForZSet();
}
/************************************** 公共方法 */
/**
* 删除缓存
* @param key 缓存key
* @return Boolean 成功失败
*/
public Boolean removeCache(String key) {
Long begTime = System.currentTimeMillis();
Boolean result = this.removeCacheComm(key);
Long endTime = System.currentTimeMillis();
LOGGER.info("删除缓存耗时 key={} time={}", key, endTime - begTime);
return result;
}
/**
* 根据Key删除缓存
* @param key 缓存key
* @return Boolean 成功失败
*/
public Boolean removeCacheComm(String key) {
Boolean hasExist = hasKey(key);
if (hasExist) {
return stringRedisTemplate.delete(key);
} else {
return true;
}
}
/**
* 删除多个key
*
* @param keys 缓存key
* @return Long 删除key的数量
*/
public Long removeList(Set<String> keys) {
if (StringUtils.isEmpty(keys)) {
return null;
}
return stringRedisTemplate.delete(keys);
}
/**
* 获取匹配的key
*
* @param keyRegular key正则表达式
* @return Set<String> 匹配的可以列表
*/
public Set<String> getKeyRegualr(String keyRegular) {
if (StringUtils.isEmpty(keyRegular)) {
return null;
}
return stringRedisTemplate.keys(keyRegular);
}
/**
* 设置过期时间
*
* @param key 缓存key
* @param time 缓存时间
*/
public void setExpire(final String key, Long time) {
stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);
}
/**
* 获取缓存时间剩余时间
*
* @param key 缓存key
* @return long 缓存剩余时间
*/
public Long getExpire(final String key) {
return stringRedisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 判断key是否存在
*
* @param key 缓存key
* @return boolean 成功失败
*/
public Boolean hasKey(String key) {
return stringRedisTemplate.hasKey(key);
}
/************************************** 公共方法 End */
/************************************** String处理(实体转化为json字符串) */
/**
* 从缓存获取值
*
* @param key 缓存key
* @param c 参数类型
* @param <T> 参数对象
* @return T 返回对象
*/
public <T> T getCache(String key, Class<T> c) {
String cache = getCache(key);
return JSONObject.parseObject(cache, c);
}
public <T> List getCacheForList(String key, Class<T> c) {
String cache = getCache(key);
return JSONObject.parseArray(cache, c);
}
/**
* 从缓存中获取
*
* @param key 缓存key
* @param typeOff 对象类型
* @return Object 返回实体
*/
public Object getCache(String key, Type typeOff) {
return JSONObject.parseObject(getCache(key), typeOff);
}
/**
* 获取缓存信息
*
* @param key 缓存key
* @return String
*/
public String getCache(String key) {
return valueOperations.get(key);
}
/**
* 设置缓存值没有设置过期时间
*
* @param key 缓存key
* @param value 缓存值
*/
public void setCache(String key, String value) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(value)) {
return;
}
valueOperations.set(key, value);
}
/**
* 设置缓存过期时间
*
* @param key 缓存KEY
* @param value 缓存值
*/
public void setExpireCacheDefault(final String key, final String value) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(value)) {
return;
}
valueOperations.set(key, value, DEFAULT_CACHE_TIME, TimeUnit.SECONDS);
}
/**
* 设置缓存过期时间
*
* @param key 缓存KEY
* @param value 缓存值
* @param time 缓存时间
*/
public void setExpireCache(final String key, final String value, Long time) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(value) || StringUtils.isEmpty(time) || time <= 0) {
return;
}
valueOperations.set(key, value, time, TimeUnit.SECONDS);
}
/************************************** String处理(实体转化为json字符串) End */
/************************************** Object处理 */
/**
* 添加缓存
*
* @param key 缓存KEY
* @param obj 缓存对象
*/
public void setCache(String key, Object obj) {
setCache(key, JSONObject.toJSONString(obj));
}
/**
* 设置缓存并添加默认过期时间
*
* @param key 缓存KEY
* @param obj 添加的缓存对象
*/
public void setExpireCacheDefault(final String key, final Object obj) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(obj)) {
return;
}
setExpireCache(key, obj, DEFAULT_CACHE_TIME);
}
/**
* 设置缓存并添加缓存过期时间
*
* @param key 缓存KEY
* @param obj 缓存对象
* @param time 缓存时间
*/
public void setExpireCache(final String key, final Object obj, Long time) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(obj) || StringUtils.isEmpty(time)) {
return;
}
this.setExpireCache(key, JSONObject.toJSONString(obj), time);
}
/************************************** Object处理 End */
/************************************** List处理 */
/**
* 添加缓存
*
* @param key 缓存KEY
* @param list 缓存列表值
*/
public void rightPushAll(String key, List list) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(list)) {
return;
}
List<String> redisList = new ArrayList<>();
if (list != null && !list.isEmpty() && list.size() > 0) {
for (Object obj : list) {
if (obj != null) {
redisList.add(JSONObject.toJSONString(obj));
}
}
}
listOperations.rightPushAll(key, redisList);
}
/**
* 添加缓存并设置过期时间 有默认值
*
* @param key 缓存KEY
* @param list 缓存列表值
*/
public void rightPushAllExpireDefault(String key, List list) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(list)) {
return;
}
this.rightPushAll(key, list);
setExpire(key, DEFAULT_CACHE_TIME);
}
/**
* 添加缓存并设置过期时间
*
* @param key 缓存KEY
* @param list 缓存列表
* @param time 缓存时间
*/
public void rightPushAllExpire(String key, List list, Long time) {
this.rightPushAll(key, list);
setExpire(key, time);
}
/**
* 添加缓存
*
* @param key 缓存KEY
* @param list 缓存列表
*/
public void leftPushAll(String key, List list) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(list)) {
return;
}
List<String> redisList = new ArrayList<>();
if (list != null && !list.isEmpty() && list.size() > 0) {
for (Object obj : list) {
if (obj != null) {
redisList.add(JSONObject.toJSONString(obj));
}
}
}
listOperations.leftPushAll(key, redisList);
}
/**
* 添加缓存并设置过期时间 有默认值
*
* @param key 缓存KEY
* @param list 缓存列表
*/
public void leftPushAllExpireDefault(String key, List list) {
if (StringUtils.isEmpty(key) || StringUtils.isEmpty(list)) {
return;
}
this.leftPushAll(key, list);
setExpire(key, DEFAULT_CACHE_TI以上是关于GitHub轻松阅读微服务实战项目流程详解第三天:公共模块的设计与实现的主要内容,如果未能解决你的问题,请参考以下文章
GitHub轻松阅读微服务实战项目流程详解第四天:账户服务的设计与实现