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


    前言

    由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis。

    正文

    当应用程序要去缓存中读取数据,但是缓存中没有找到该数据,则重新去数据库中获取数据,然后将数据存入缓存中。
    还有当我们需要更新或者删除缓存中的数据时候,需要让缓存失效。

    cache

    配置

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

    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 缓存。

    还可以自定义注册 RedisCacheManager,设置相关参数:

        @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 实现数据缓存

  • 相关阅读:
    react实现登陆页面
    “css中设置边框不显示,border:none; 和border:0; 都没用”的解决方案
    JQuery AJAX的post()方法和get()方法的区别
    JQuery事件之文档/窗口事件
    JQuery事件之表单事件
    【K8S初识】-什么是Kubernetes
    Yaml语法理解
    Json语法理解
    Maven学习-Maven工程中默认的环境变量
    Java语言(7)-Java中的注解
  • 原文地址:https://www.cnblogs.com/qnight/p/9005531.html
Copyright © 2020-2023  润新知