学习Spring Boot:(二十五)使用 Redis 实现数据缓存

前言

因为 Ehcache 存在于单个 java 程序的进程中,没法知足多个程序分布式的状况,须要将多个服务器的缓存集中起来进行管理,须要一个缓存的寄存器,这里使用的是 Redis。css

正文

当应用程序要去缓存中读取数据,可是缓存中没有找到该数据,则从新去数据库中获取数据,而后将数据存入缓存中。
还有当咱们须要更新或者删除缓存中的数据时候,须要让缓存失效。html

cache

配置

在系统配置文件中加入 redis 的链接参数:java

spring:
  redis:
    host: 192.168.19.200 # 120.79.208.199 # host ,默认 localhost
    port: 6379 # 端口号,默认6379
    pool:
    # 设置都是默认值,能够按需求设计
      max-active: 8 # 可用链接实例的最大数目,默认值为8;若是赋值为-1,则表示不限制;
      max-idle: 8  # 控制一个pool最多有多少个状态为idle(空闲的)的redis实例,默认值也是8。
      max-wait: -1 # 等待可用链接的最大时间,单位毫秒,默认值为-1,表示永不超时。
      min-idle: 0 # 控制一个pool最少有多少个状态为idle(空闲的)的redis实例,默认值为0。
    timeout: 0 # 链接超时时间 单位 ms,默认为0
    password: master # 密码,根据本身的 redis 设计,默认为空

而后在系统入口启动类上面加入打开缓存的注解 @EnableCaching
若是没启用其余缓存,这样就自动打开 redis 缓存。redis

还能够自定义注册 RedisCacheManager,设置相关参数:spring

@Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
        // 设置缓存最大时间 24 h
        redisCacheManager.setDefaultExpiration(24 * 60 * 60);
        return redisCacheManager;
    }

使用

@Service
@CacheConfig(cacheNames = "em")
public class EmployeeServiceImpl implements EmployeeService {
    @Autowired
    private EmployeeDao dao;

    @Override
    @Cacheable(key = "#p0")
    public Employee findOne(Long id) {
        return dao.findOne(id);
    }

    /** * 更新缓存中的数据, * 因为 redis 是存在外部,不是 ehcache 那样存在于项目进程中,须要咱们主动去更新 缓存 * @param employee * @return */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CachePut(key = "#p0.id")
    public Employee update(Employee employee) {
        return dao.save(employee);
    }

    /** * 一样主动去删除 cache * @param id */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CacheEvict(key = "#p0")
    public void delete(Long id) {
        dao.delete(id);
    }
}

注解的使用参考前面的学习Spring Boot:(二十一)使用 EhCache 实现数据缓存 数据库

相关文章
相关标签/搜索