Redis學(xué)習(xí)之緩存

Redis學(xué)習(xí)之緩存

前言

在前面的學(xué)習(xí)中,我們學(xué)習(xí)了Jedis以及Spring-redis-data的使用,這些內(nèi)容主要是直接使用Redis作為數(shù)據(jù)庫,接下來,我們從另一個角度來學(xué)習(xí)Redis,將Redis作為緩存來使用,在使用Redis的場景中,很大一部分就是將Redis作為緩存來使用。

Redis緩存使用

為了操作的方便,這里我們同樣采用Spring Boot作為腳手架,你可以直接復(fù)用上一小節(jié)的項目工程即可。

在Spring中,Spring通過引入聲明式緩存的方式來透明地實現(xiàn)緩存,通過幾個簡單的配置以及注解的使用,就能享受到Spring帶來的方便了。

緩存配置

引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

Bean配置

在上一小節(jié)的Bean的基礎(chǔ)上,增加一個CacheManager的Bean即可,當然,如果直接作為緩存,則有一些Bean是可以不用的

@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ZERO)
            .serializeValuesWith(
                    RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
            .disableCachingNullValues();

    return RedisCacheManager.builder(factory)
            .cacheDefaults(config)
            .build();
}

這里同樣需要注意,2.x跟1.x的配置是不同的,1.x可以直接往RedisCacheManger中注入一個RedisTemplate即可,所以,1.x的方式無需額外配置緩存的序列化器,在2.x中,緩存的序列化器默認使用的jdk序列化器,所以,如果是想使用其他的序列化器,依舊需要自行配置,這里是個大坑。

緩存使用

配置完之后,就可以使用緩存了,首先是開啟緩存功能,在啟動類加上注解@EnableCaching即可

然后是在需要緩存的方法中組合使用

  • @Cacheable,主要用于標注查詢操作,如果鍵匹配,只有第一次會命中
  • @CacheEvit,主要用于標注刪除操作
  • @CachePut,主要用于標注更新跟插入操作,注意,每次都會命中

當然,如果同個類中的多個方法都需要操作,可以在類上使用@CacheConfig進行通用的配置。

一個簡單的演示代碼如下,這里為了操作簡單,直接構(gòu)造數(shù)據(jù)模擬數(shù)據(jù)庫操作了

@Service
// 指定緩存空間的名稱
@CacheConfig(cacheNames = "user") 
public class UserService {

    // 指定對應(yīng)的鍵
    @Cacheable(key = "#p0")
    public String queryById(int id) {
        System.out.println("in query");
        if (id < 10) {
            return "less than 10";
        }
        return "more than 10";
    }

    @Cacheable(key = "#p0")
    public User getUserByName(String username) {
        System.out.println("in query " + username);
        User user= new User();
        if ("xavier".equals(username)) {
            user.setName("xavier");
            user.setPassword("xavier");
        }
        if ("xuhuanfeng".equals(username)) {
            user.setPassword("xuhuanfeng");
            user.setName("xuhuanfeng");
        }
        return user;
    }
    @CacheEvict(key = "#p0")
    public void deleteUserByName(String username) {
        System.out.println("delete " + username);
    }

    @CachePut(key = "#p0")
    public User updateUser(String username) {
        System.out.println("in update " + username);
        User user= new User();
        if ("xavier".equals(username)) {
            user.setName("xavier");
            user.setPassword("xavier--update");
        }
        if ("xuhuanfeng".equals(username)) {
            user.setPassword("xuhuanfeng");
            user.setName("xuhuanfeng--update");
        }
        return user;
    }
}

調(diào)用對應(yīng)的操作,然后觀察對應(yīng)的輸出以及Redis中的內(nèi)容就能看到具體的變化啦。

總結(jié)

本小節(jié)主要學(xué)習(xí)了將Redis作為緩存來使用,結(jié)合Spring Cache,可以看到基本上對應(yīng)緩存的操作對于開發(fā)者來說是透明的,使用起來也非常簡單,當然,關(guān)于緩存的坑很大,不過我目前還沒有深入學(xué)習(xí),以后有機會再分享一下,到了這里,關(guān)于Redis的學(xué)習(xí)也暫時告一段落了,當然,告一段落并不是結(jié)束。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,285評論 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,968評論 1 92
  • 第三世 紫云英花開的季節(jié) 聚會的第二天早上,因為酒喝多了,依云頭有點重,早上匆匆起來上班,路上打了份早餐,帶來單位...
    簡玦閱讀 356評論 0 4
  • 一、使用 LeakCanary的使用非常的簡單,兩行代碼搞定。當然也可以主動的添加需要監(jiān)聽的對象;LeakCana...
    Jesse_zhao閱讀 1,356評論 0 1

友情鏈接更多精彩內(nèi)容