Spring boot redis的使用(一)
阿新 • • 發佈:2019-02-05
package com.zxl.examples.service; import com.zxl.examples.catche.customannotation.UserSaveCache; import com.zxl.examples.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * Created by Administrator on 2017/7/24. */ @Service("userSerivce") public class UserSerivceImpl { @Autowired UserRepository userRepository; @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisTemplate redisTemplate; //unless-->用於否決快取更新的,不像condition,該表達只在方法執行之後判斷,此時可以拿到返回值result進行判斷了 @Cacheable(value="userCache",key="'user:'+#username",unless = "#result==null") public User getUserByUsername(String username){ User user = null; List userlist = userRepository.findByUsername(username); if(userlist!=null && userlist.size()>0){ user = userlist.get(0); } return user; } // @Cacheable(value="userCache#120",key="'user:'+#username",unless = "#result==null") // public User getUserByUsername(String username){ // User user = null; // List userlist = userRepository.findByUsername(username); // if(userlist!=null && userlist.size()>0){ // user = userlist.get(0); // } // return user; // } //allEntries-->是否移除所有資料 //beforeInvocation-->是呼叫方法之前移除/還是呼叫之後移除 @CacheEvict(value = "userCache",key="'user:'+#user.username") public void delUserById(User user){ userRepository.delete(user); } public String setUserInRedis(){ stringRedisTemplate.opsForValue().set("abc","123",60L, TimeUnit.SECONDS); return stringRedisTemplate.opsForValue().get("abc"); // redisTemplate.opsForList();//可直接放入實現序列化的pojo } public void delUserInRedis(){ stringRedisTemplate.delete("abc"); } //condition-->滿足快取條件的資料才會放入快取,condition在呼叫方法之前和之後都會判斷 @CachePut(value="userCache",key = "#user.username",condition = "#user.username<='100'") public User save(User user){ userRepository.save(user); return user; } @Caching( put={ @CachePut(value = "userCache", key = "'user:'+#user.id"), @CachePut(value = "userCache", key = "'user:'+#user.username") } ) public User addUser(User user){ userRepository.save(user); return user; } @UserSaveCache public User addUser2(User user){ userRepository.save(user); return user; } @Cacheable(value="userCache",key="'user:'+#username",condition = "#root.target.canCache()",unless = "#result==null") public User getUserByUsername2(String username){ User user = null; List userlist = userRepository.findByUsername(username); if(userlist!=null && userlist.size()>0){ user = userlist.get(0); } return user; } @Cacheable(value="userCache",key="'user:'+#username",condition = "#root.target.notCache()") public User getUserByUsername3(String username){ User user = null; List userlist = userRepository.findByUsername(username); if(userlist!=null && userlist.size()>0){ user = userlist.get(0); } return user; } public boolean canCache(){ return true; } public boolean notCache(){ return false; } }