redis缓存首页热点数据

目录

一、引言

1、场景

2、RedisTemplate

二、引入redis

1、项目中集成redis

2、添加redis连接配置

配置Redis

三、使用缓存注解

1、修改Redis配置类

2、添加缓存注解

一、引言

1、场景

        由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页数据缓存到redis中,减少数据库压力和提高访问速度。

2、RedisTemplate

Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是Spring Data Redis中对Jedis api的高度封装。
Spring Data Redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化功能,支持发布订阅,并对spring cache进行了实现。

二、引入redis

1、项目中集成redis

common父模块中添加redis依赖,Spring Boot 2.0以上默认通过commons-pool2连接池连接redis



    org.springframework.boot
    spring-boot-starter-data-redis



    org.apache.commons
    commons-pool2

2、添加redis连接配置

spring: 
  redis:
    host: 192.168.100.100
    port: 6379
    database: 0
    password: 123456 #默认为空
    lettuce:
      pool:
        max-active: 20  #最大连接数,负值表示没有限制,默认8
        max-wait: -1    #最大阻塞等待时间,负值表示没限制,默认-1
        max-idle: 8     #最大空闲连接,默认8
        min-idle: 0     #最小空闲连接,默认0

配置Redis

service-base添加RedisConfig

@Configuration
@Slf4j
public class RedisConfig {
    /**
     * @param lettuceConnectionFactory
     * @return
     *
     * redis序列化的工具配置类,下面这个请一定开启配置
     * 127.0.0.1:6379> keys *
     * 1) "ord:102"  序列化过
     * 2) "\xac\xed\x00\x05t\x00\aord:102"   野生,没有序列化过
     */
    @Bean
    public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory)
    {
        RedisTemplate redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        //设置key序列化方式string
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置value的序列化方式json
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }
}

三、使用缓存注解

1、修改Redis配置类

配置类上添加注解

@EnableCaching

@SpringBootApplication
@EnableCaching  // 启用 Spring Cache
public class SpringdocCacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringdocCacheApplication.class, args);
    }

}

添加bean配置

@Bean
public CacheManager cacheManager(LettuceConnectionFactory connectionFactory) {
    
    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
        //过期时间600秒
        .entryTtl(Duration.ofSeconds(600)) 
        // 配置序列化
        .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
        .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
        .disableCachingNullValues();

    RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory)
        .cacheDefaults(config)
        .build();
    return cacheManager;
}

2、添加缓存注解

@Cacheable(value = "xxx", key = "'xxx'"):

标注在方法上,对方法返回结果进行缓存。下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。

@Cacheable(value = "index", key = "'selectHotProduct")
@Override
public List selectHotProduct() {

    return list();
}

你可能感兴趣的:(缓存,redis,数据库)