SpringBoot使用redis做缓存机制

SpringBoot 2.0.3 版本、redis3.2版本

1. 加入jar包

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

2. 编写RedisConfig类

package com.pibigstar.common.config;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;


@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{

    //缓存管理器
    @Bean 
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory).build();
        return cacheManager;
    }
    //自定义缓存key生成策略
      @Bean
      public KeyGenerator keyGenerator() {
          return new KeyGenerator(){
              @Override
              public Object generate(Object target, java.lang.reflect.Method method, Object... params) {
                  StringBuffer sb = new StringBuffer();
                  sb.append(target.getClass().getName());
                  sb.append(method.getName());
                  for(Object obj:params){
                      sb.append(obj.toString());
                  }
                  System.out.println("调用Redis生成key:"+sb.toString());
                  return sb.toString();
              }
          };
      }
}

2.1 配置application.yml文件

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    database: 0 # 设置数据库索引为0 默认为0
    password: # 密码为空
    jedis:
      pool:
        max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 10 # 连接池中的最大空闲连接
        min-idle: 2 # 连接池中的最小空闲连接
    timeout: 2000 # 连接超时时间(毫秒)

3. 在 适当的地方加入缓存

package com.pibigstar.service.impl;

import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import com.pibigstar.dao.GradeMapper;
import com.pibigstar.domain.Grade;
import com.pibigstar.service.GradeService;

@Service
@CacheConfig(cacheNames="grades")
public class GradeServiceImpl implements GradeService{

    @Autowired
    private GradeMapper gradeMapper;

    @Override
    @Cacheable //开启缓存
    public Grade getOneById(Long id) {
        return gradeMapper.selectByPrimaryKey(id);
    }

    @Override
    @Cacheable //开启缓存
    public List<Grade> list() {
        return gradeMapper.findAll();
    }
}
  • @Cacheable将查询结果缓存到redis中,(key=”#p0”)指定传入的第一个参数作为redis的key。
  • @CachePut,指定key,将更新的结果同步到redis中
  • @CacheEvict,指定key,删除缓存数据,allEntries=true,方法调用后将立即清除缓存

4. 启动

4.1 启动redis

下载: https://pan.baidu.com/s/1tTYcCRUF-qDikhPTkSiJTQ

解压,双击 start.bat 即可

RedisDesktopManager 文件夹放的是redis 可视化工具

4.2 启动项目

调用 开启缓存的那两个方法,就可以看到控制台输出了:

通过redis 可视化工具可以看到:

已经有key值生成了,

当再一次查询的时候就不会去从数据库中查询了,而是直接从我们的redis中查询,速度会非常快。

需要注意的是:当数据库中值改变了,因为它查询的是从缓存中查询,所以查出来的数据还是之前的数据,只有当key过期之后或者被删除之后才能查到最新的值

5. 常用redis命令

  • flushdb:清空当前数据库。
  • select [index]:选择索引数据库,index为索引值名,如:select 1。
  • keys *:查看数据库内所有的key。
  • del [key]:删除一条指定key的值。
  • get [key] : 获得 指定key的值
  • flushall:清空所有数据库。
  • quit:退出客户端连接

猜你喜欢

转载自blog.csdn.net/junmoxi/article/details/80913060