Springboot + 整合redis 基於註解使用

首先說明,樣例的項目全做的查詢操作,所以沒有去介紹其他的幾個註解

首先引入springboot 整合redis的jar包依賴

       <!-- 把springboot版本說明-->
		<parent>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-parent</artifactId>
	        <version>2.2.1.RELEASE</version>
	        <relativePath/> <!-- lookup parent from repository -->
   		 </parent>
   		 <!--這個纔是主角-->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

其次 上配置文件

spring:
	redis:
		host: 127.0.0.1
	    database: 0
	    port: 6383
	    password: xxxxx
	    # 連接超時時間(毫秒)
	    timeout: 5000
	    jedis:
	      pool:
	        # 連接池最大連接數(使用負值表示沒有限制)
	        max-active: 10
	        # 連接池最大阻塞等待時間(使用負值表示沒有限制)
	        max-wait: -1
	        # 連接池中的最大空閒連接
	        max-idle: 5
	        # 連接池中的最小空閒連接
	        min-idle: 0
	

接着,上配置類

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);
    @Bean
    public RedisCacheConfiguration redisCacheConfiguration(){
        return RedisCacheConfiguration
                .defaultCacheConfig()
                .entryTtl(Duration.ofHours(8))
                .serializeKeysWith(RedisSerializationContext
                                   .SerializationPair
                                   .fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext
                                   .SerializationPair
                                   .fromSerializer(new GenericJackson2JsonRedisSerializer()));
    }


    @Override
    @Bean
    public CacheErrorHandler errorHandler() {
        // 異常處理,當Redis發生異常時,打印日誌,但是程序正常走
        logger.info("初始化 -> [{}]", "Redis CacheErrorHandler");
        return new CacheErrorHandler() {
            @Override
            public void handleCacheGetError(RuntimeException e, Cache cache, Object key) {
                logger.error("Redis occur handleCacheGetError:key -> [{}]", key, e);
            }

            @Override
            public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) {
                logger.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e);
            }

            @Override
            public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) {
                logger.error("Redis occur handleCacheEvictError:key -> [{}]", key, e);
            }

            @Override
            public void handleCacheClearError(RuntimeException e, Cache cache) {
                logger.error("Redis occur handleCacheClearError:", e);
            }
        };
    }
}

這裏上面註釋了@Configuration,需要被@SpringBootApplication註解掃到,不然這個配置就等於沒作用,至於怎麼讓它被掃描到,可以把這個配置文件放到低於Application啓動類低一個level的package裏面
eg
|-- src/main/java/com.xxx.xx/config/RedisConfig.java
|-- src/main/java/com.xxx.xx/Application.java

四部曲已經到了最後一步,那就是使用舉例

@Service
@CacheConfig(cacheNames = {"base-info"}) //這個是對每個類都有一個分層
public class BaseInfoServiceImpl implements IBaseInfoService {
	
	// 這裏全部都是查詢,所以使用了@Cachable註解,至於用於更新和刪除的註解可以自行百度,很簡單
	@Override
    @Cacheable(key = "targetClass + methodName")
    public xxxDTO getDto() {
		return xxx;
	}
}

最後,當然是看效果這裏推薦使用Redis Desktop Mananger 看效果
在這裏插入圖片描述
如果覺得JSON形式的序列化和反序列化效率低,想使用二進制的,可以使用Kryo序列化方式,只需要上面的RedisConfig中

.serializeValuesWith(RedisSerializationContext
                                   .SerializationPair
                                   .fromSerializer(new GenericJackson2JsonRedisSerializer()));
// 修改new GenericJackson2JsonRedisSerializer()  替換爲其他的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章