1. 程式人生 > >springboot結合redis做資料快取

springboot結合redis做資料快取

     在專案資料比較多,然後做各種維度,比如天,月等維度的資料查詢的時候,會因為資料太多,查詢太過複雜,而影響查詢資料的速度,如果一個介面每次都需要一兩分鐘才能加載出來,這樣使用者體驗也太差了吧,所以這個時候就要想辦法去解決,而redis快取剛好可以解決這個問題,一般歷史資料不會變的我們去做個快取,然後新的資料我們去實時更新,這樣查詢速度就快了很多,言歸正傳,現在開始介紹我在springboot中用到的redis快取的實踐:

首先是配置檔案:

首先是pom.xml檔案

    

只是大部分所要用到的maven依賴。

redis配置

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * redis配置
 *
 */
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {


    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        //使用Jackson2JsonRedisSerializer來序列化和反序列化redis的value值
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer來序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {

        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        config = config.entryTtl(Duration.ofMinutes(60*60*24*4));

        // 設定一個初始化的快取空間set集合
        Set<String> cacheNames =  new HashSet<>();
        cacheNames.add("order_pay");

        // 對每個快取空間應用不同的配置
        Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
        configMap.put("order_pay",  config.entryTtl(Duration.ofSeconds(60*60*24*4)));
        RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory)
                .initialCacheNames(cacheNames)
                .withInitialCacheConfigurations(configMap)
                .build();
        return cacheManager;
    }

}

當其中有多個快取是,可以自定義的設定快取的時間

在mapper介面中:

  @Cacheable可以標記在一個方法上,也可以標記在一個類上。當標記在一個方法上時表示該方法是支援快取的,當標記在一個類上時則表示該類所有的方法都是支援快取的。對於一個支援快取的方法,Spring會在其被呼叫後將其返回值快取起來,以保證下次利用同樣的引數來執行該方法時可以直接從快取中獲取結果,而不需要再次執行該方法。Spring在快取方法的返回值時是以鍵值對進行快取的,值就是方法的返回結果,至於鍵的話,Spring又支援兩種策略,預設策略和自定義策略。需要注意的是當一個支援快取的方法在物件內部被呼叫時是不會觸發快取功能的。@Cacheable可以指定三個屬性,value、key和condition。

引數 解釋 example
value 快取的名稱,在 spring 配置檔案中定義,必須指定至少一個 例如:
@Cacheable(value=”mycache”)
@Cacheable(value={”cache1”,”cache2”}
key 快取的 key,可以為空,如果指定要按照 SpEL 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合 @Cacheable(value=”testcache”,key=”#userName”)
condition 快取的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進行快取 @Cacheable(value=”testcache”,condition=”#userName.length()>2”)

相關推薦

springboot結合redis資料快取

     在專案資料比較多,然後做各種維度,比如天,月等維度的資料查詢的時候,會因為資料太多,查詢太過複雜,而影響查詢資料的速度,如果一個介面每次都需要一兩分鐘才能加載出來,這樣使用者體驗也太差了吧,所以這個時候就要想辦法去解決,而redis快取剛好可以解決這個問題,一般歷史

Springboot使用Redis進行資料快取

1.以往都是在後臺直接讀取資料庫,如果操作過快會給資料庫不小的壓力,因此java引入了非關係型資料庫Redis進行資料快取,減輕了資料庫的負擔! 使用測試Redis非關係型資料庫,通過查詢關係型資料庫,檢視Redis快取情況 首先引入pom.xml中的依賴: //jsa

Spring Boot整合redis資料快取

package com.fcc.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.faste

springboot 整合redis 快取

  一、新增依賴jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-re

SpringBoot使用redis快取機制

SpringBoot 2.0.3 版本、redis3.2版本 1. 加入jar包 <dependency> <groupId>org.springframework.boot</groupId> &

SpringBoot使用redis快取

Redis由於資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1),支援豐富資料型別,也支援事務,操作都是原子性,還具有其他豐富的特性,如可按key設定過期時間,過期後將會自動刪除.因此我們通常使用redis來作為快取,下面我根

spring4.0.9結合redis進行資料快取

一、今天將以前公司的由SpringMVC搭建的框架和redis整合。Spring版本為4.0.9  redis安裝在linux(CentOS6.5)下面。資料庫使用mysql。 由於redis,  1、優異的讀寫效能 我在這裡使用了Redis-benchmark這個自帶的效

基於redis的zSet集合資料快取實現分頁查詢 java

      需要場景:最近公司要做手機頁面展示新聞文章資料查詢的優化工作,讓我提個優化方案。現狀是目前手機頁面的資料請求系統後臺,系統後臺然後呼叫其他系統的介面,返回分頁資料到前臺展示,這樣一來,使用者每次下拉到頁面底部載入更多資料都要呼叫其他介面,使用者體驗顯然不是很好,那

SSM中使用redis中間快取,詳細註釋,程式碼可以執行

1.介紹 在開發中經常遇到大量的重複的,高併發的查詢,此時可以使用redis快取,將結果存入到redis中,當用戶發起查詢請求時,先在redis中查詢結果,沒有命中再去訪問資料庫。這樣可以大大減少資料庫壓力。 2.結構目錄 我的專案可以正常執行,程式碼都會給出來,所以程式碼都是可以跑的

JAVA利用enum結合testng資料驅動示例

資料驅動是做自動化測試中很重要的一部分,資料來源的方案也是百花八門了,比如利用外部檔案,直接在@DataProvider中寫死等等,我們今天介紹一下利用enum來做資料來源,先來看一下enum的寫法: public enum EnumData { PAY_RESERVE(1, "支付預約

springboot整合redis進行資料操作(一)

redis是一種常見的nosql,日常開發中,我們使用它的頻率比較高,因為它的多種資料介面,很多場景中我們都可以用到,並且redis對分散式這塊做的非常好。 springboot整合redis比較簡單,並且使用redistemplate可以讓我們更加方便的對資料進行操作。 1、新增依賴

springboot +springsession+redis session共享

springboot版本 2.0.5.RELEASE maven: <dependency> <groupId>org.springframework.boot</groupId> <arti

ASP.NET結合Redis實現分散式快取

  最近一個專案ASP.NET+MySQL 有的網頁開啟初始化的查詢需要10秒甚至更久,使用者體驗極差,而且併發量變大的時候網站容易崩潰 後來想了兩種解決方案都不是太滿意 1、資料庫裡建一張快取表,後臺作業定時去更新這張表,每次網頁開啟就可以直接從快取表裡查詢 2、使用者第一次開啟網站將資

springboot整合redis進行資料操作

1、新增依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-red

SpringBoot整合Redis實現自動快取、更新、刪除

1:引入springboot redis的maven依賴(建議使用spring-boot-dependencies或者使用spring-io-platform進行構建專案) <dependency> <g

Spring Boot 整合mybatis 用Redis二級快取

一:整合druid資料來源 一:導包 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artif

redis的主從複製和高可用、叢集,以及用redismysql快取

一、redis的安裝先在下載安裝包解壓後進入目錄應為已經有Makefile了所以直接make編譯這裡會報錯,需要gcc編譯器安裝好gcc,再次make編譯,還是會報錯;這個錯誤根據 Readme 可知需要執行 make MALLOC=libcmake完成後,提示去到 src

SpringBoot使用redis分散式Session

1. 核心原理 主要是通過redis,當用戶登入後生成一個隨機的uuid作為token,將token作為鍵,user物件作為值儲存到redis資料庫中,同時將token儲存到cookie中 ,當訪問其他頁面時判斷cookie中是否有token,如果有,則根據此

spring boot 整合 mybatis 使用redis二級快取

1引入(mybatis和redis) <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter&l

springboot結合redis實現redis訂閱釋出模式

redis訂閱釋出模式: Redis提供了釋出訂閱功能,可以用於訊息的傳輸,Redis的釋出訂閱機制包括三個部分,釋出者,訂閱者和Channel。  釋出者和訂閱者都是Redis客戶端,Channel