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()  替换为其他的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章