Jelajahi Sumber

添加缓存时间

tianyunperfect 3 tahun lalu
induk
melakukan
c83fcb975a

+ 17 - 2
book-server/src/main/java/com/book/server/aspect/CacheAOP.java

@@ -15,6 +15,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
 
 import static com.book.server.config.Const.CacheSplit;
 
@@ -51,7 +52,7 @@ public class CacheAOP {
             } else if (cacheFind.update()) {
                 // 更新缓存
                 result = joinPoint.proceed();
-                redisUtil.setWithTime(key, JsonUtils.toJsonStr(result));
+                setResult(key, result, cacheFind);
             } else {
                 // 默认,查询缓存,不存在则set
                 Object o = redisUtil.get(key);
@@ -64,7 +65,7 @@ public class CacheAOP {
                     //没缓存,查询数据库
                     result = joinPoint.proceed();
                     //将数据保存到redis
-                    redisUtil.setWithTime(key, JsonUtils.toJsonStr(result));
+                    setResult(key, result, cacheFind);
                 }
             }
             return result;
@@ -74,4 +75,18 @@ public class CacheAOP {
             throw new RuntimeException(throwable);
         }
     }
+
+    /**
+     * 根据缓存时间,缓存数据
+     * @param key
+     * @param result
+     * @param cacheFind
+     */
+    private void setResult(String key, Object result, CacheFind cacheFind) {
+        if (cacheFind.seconds() == 0) {
+            redisUtil.setWithTime(key, JsonUtils.toJsonStr(result));
+        } else {
+            redisUtil.set(key, JsonUtils.toJsonStr(result), cacheFind.seconds(), TimeUnit.SECONDS);
+        }
+    }
 }

+ 6 - 2
book-server/src/main/java/com/book/server/service/CacheService.java

@@ -184,14 +184,18 @@ public class CacheService {
 
     @CacheFind(key = "user")
     public User getUserByIdCache(Long id) {
-        User obj = userMapper.selectByPrimaryKey(id);
-        return obj;
+        return bookService.getUserById(id);
     }
 
     @CacheFind(key = "user", delete = true)
     public void deleteUserByIdCache(Long id) {
     }
 
+    @CacheFind(key = "user", update = true)
+    public User updateUserByIdCache(Long id) {
+        return bookService.getUserById(id);
+    }
+
     @CacheFind(key = "searchKeyword")
     public List<SearchKeyword> getSearchKeywordsCache(String sex) {
         SearchKeywordExample example = SearchKeywordExample.newAndCreateCriteria()

+ 24 - 14
book-server/src/main/java/com/book/server/service/impl/BookServiceImpl.java

@@ -276,19 +276,10 @@ public class BookServiceImpl implements BookService {
                     .example()
             );
             if (consume == null) { // 没有购买记录
-                User user = getUserById(bookContentVO.getUserId());
+                User user = cacheService.getUserByIdCache(bookContentVO.getUserId());
                 //查询免费看点
-                RechargeExample example = RechargeExample.newAndCreateCriteria()
-                        .andUserIdEqualTo(bookContentVO.getUserId())
-                        .andFreeEndtimeGreaterThan(DateUtils.getNow())
-                        .andRemainFreeKandianGreaterThan(0)
-                        .example();
-                example.orderBy(Recharge.Column.freeEndtime.desc());
-                List<Recharge> freeRecharges = rechargeMapper.selectByExample(example);
-                Integer freeCount = 0;
-                if (freeRecharges != null) {
-                    freeCount = freeRecharges.stream().mapToInt(x -> x.getFreeKandian()).sum();
-                }
+                List<Recharge> freeRecharges = getFreeCharges(bookContentVO.getUserId());
+                int freeCount = getFreeCountFromCharges(freeRecharges);
                 //免费是否足够
                 if (freeCount > book.getPrice()) {
                     //扣除一部分免费的
@@ -326,7 +317,7 @@ public class BookServiceImpl implements BookService {
                     // 更新到 user
                     int i = userMapper.updateUserKandian(user, kandian, 0, DateUtils.getNow());
                     checkUpdate(i);
-                    cacheService.deleteUserByIdCache(user.getId());
+                    cacheService.updateUserByIdCache(user.getId());
 
                 } else {
                     return Result.failure(ResultCode.NOMONEY);
@@ -344,6 +335,25 @@ public class BookServiceImpl implements BookService {
         return Result.byObject(content);
     }
 
+    public int getFreeCountFromCharges(List<Recharge> freeRecharges) {
+        Integer freeCount = 0;
+        if (freeRecharges != null) {
+            freeCount = freeRecharges.stream().mapToInt(x -> x.getFreeKandian()).sum();
+        }
+        return freeCount;
+    }
+
+    public List<Recharge> getFreeCharges(Long userId) {
+        RechargeExample example = RechargeExample.newAndCreateCriteria()
+                .andUserIdEqualTo(userId)
+                .andFreeEndtimeGreaterThan(DateUtils.getNow())
+                .andRemainFreeKandianGreaterThan(0)
+                .example();
+        example.orderBy(Recharge.Column.freeEndtime.desc());
+        List<Recharge> freeRecharges = rechargeMapper.selectByExample(example);
+        return freeRecharges;
+    }
+
     @Autowired
     private ApplicationEventPublisher applicationEventPublisher;
 
@@ -681,7 +691,7 @@ public class BookServiceImpl implements BookService {
     }
 
     public User getUserById(Long id) {
-        return cacheService.getUserByIdCache(id);
+        return userMapper.selectByPrimaryKey(id);
     }
 
     private String getUserKey(Long id) {