Spring Boot 整合redis

bisnow_發表於2019-04-29

整合redis

  • 實體類需要序列化
  • 額外配置依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-reis</artifactId>
</dependency>
複製程式碼
  • 通過配置檔案配置
#配置redis
spring.redis.host=192.168.243.129
spring.redis.port=6379
spring.redis.database=0
spring.redis.password=bisnow

#配置cache
spring.cache.cache-names=c1

複製程式碼
  • 啟動器開啟快取自動配置
@SpringBootApplication
@EnableCaching
public class RediscacheApplication {
複製程式碼
  • 此處模擬資料庫操作
@Service
// 配置快取名稱,不是必須的,可以在每一次啟動時指定
@CacheConfig(cacheNames = "c1")
public class UserService {
    /**
     * @Cacheable 將當前方法的返回值快取起來
     * 快取的key就是方法的引數,方法返回值是value
     *
     * 如果多個引數,同時作為key(必須都滿足才能取出快取)
     * 多引數指定某個引數為key 需要手動配置
     * @Cacheable(key = "id") 表示只用id作為key
     * @param id
     * @return
     */
    @Cacheable(key = "#id")
    public User getUserById(Long id,String username){
        System.out.println(id);
        User user = new User();
        user.setId(id);
        return user;
    }
    /**
     * 刪除
     *  allEntries 預設為false,表示根據key刪除而不是全刪除快取
     *  beforeInvocation 預設為false 表示先刪除資料,後清除快取
     * @param id
     */
    //這個註解一般加在刪除方法上,表示同步刪除快取中的資料
    @CacheEvict(allEntries = false,beforeInvocation = false)
    public void deleteById(Long id){
        //在這裡執行刪除操作,去資料庫中刪除
        //正常的邏輯:首先去資料庫中刪除,然後去快取中刪除
    }

    /**
     * 更新
     *  @CachePut 這個註解一般用在修改方法上
     *  表示修改資料庫資料的同時也修改快取
     *  更新方法必須有返回值
     * geng
     * @param id
     * @return
     */
    @CachePut
    public User updateById(Long id){
        User user = new User();
        user.setId(99L);
        user.setUsername("李四");
        return user;
    }
}

複製程式碼
  • 測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class RediscacheApplicationTests {
    @Autowired
    UserService userService;

    @Test
    public void test1(){
        User userById = userService.getUserById(99L,"");
        System.out.println("userbyid >>> 1:" +userById);
        User userById2 = userService.getUserById(99L,"");
        System.out.println("uuerbyid >>> 2:" + userById2);
    }

    @Test
    public void test2(){
        User userById1 = userService.getUserById(99L,"");
        System.out.println("uuerbyid >>> 1:" + userById1);
        userService.deleteById(99L);
        User userById2 = userService.getUserById(99L,"");
        System.out.println("uuerbyid >>> 2:" + userById2);
    }

    @Test
    public void test3(){
        User userById = userService.getUserById(99L,"");
        System.out.println("userbyid >>> 1:" +userById);
        userService.updateById(99L);
        User userById2 = userService.getUserById(99L,"");
        System.out.println("uuerbyid >>> 2:" + userById2);
    }
}
複製程式碼

相關文章