• spring boot-16.使用redis做缓存


    spring boot 自动配置了多种 缓存管理器,按照下面的顺序查找,如果容器中有相应的组件,则使用相应的缓存管理器。

    • Generic
    • JCache (JSR-107)
    • EhCache 2.x
    • Hazelcast
    • Infinispan
    • Redis
    • Guava
    • Simple

    使用redis 作为缓存的步骤分为以下点

    1.安装redis 服务

    我使用的是docker 安装的redis,当然也可下载redis安装包,解压后运行。端口映射的6379

    2.添加redis 依赖

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

    3.配置redis 

    我只配置了redis 的地址,端口默认,没有密码

     spring.redis.host=192.168.1.215

    关于redis 的其他配置都在spring.redis 下配置

    spring.redis.host=127.0.0.1
    # Redis服务器连接端口
    spring.redis.port=6379
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    # 连接池最大连接数(使用负值表示没有限制)
    spring.redis.pool.max-active=8
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.pool.max-wait=-1
    # 连接池中的最大空闲连接
    spring.redis.pool.max-idle=8
    # 连接池中的最小空闲连接
    spring.redis.pool.min-idle=0
    # 连接超时时间(毫秒)
    spring.redis.timeout=30000

    4.经过上面的几步,就可以使用缓存管理器了。但是由于默认使用的序列化器使用的是jdk自带的,序列化后数据为乱码,不方便查看。所以我们还配置自己的redisTemplate 和 CacheManager 去替换自动配置的组件

    @Configuration
    public class redisConfig2 {
        
           @Bean(name="redisTemplate")
            public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
         
                RedisTemplate<String, String> template = new RedisTemplate<>();
                RedisSerializer<String> redisSerializer = new StringRedisSerializer();
                Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
                ObjectMapper om = new ObjectMapper();
                om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
                jackson2JsonRedisSerializer.setObjectMapper(om);
                template.setConnectionFactory(factory);
                template.setDefaultSerializer(jackson2JsonRedisSerializer);
                return template;
            }
           
           
            @Bean
            public CacheManager cacheManager(@SuppressWarnings("rawtypes")RedisTemplate redisTemplate) {
         
                RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
                cacheManager.setUsePrefix(true);
                cacheManager.setDefaultExpiration(3000);
                return cacheManager;
            } 
    }

    5.然后就可以使用注解进行缓存操作了

    @Cacheable(cacheNames= {"dept"})
        public Department getDeptByID(Integer id) {
            log.info("查询"+id+"号员工");
            Department dept = departmentMapper.selectByPrimaryKey(id);
            return dept;
        }

    6.如果不想在方法中添加注解而是希望在代码中进行缓存操作,则需要先注入我们的缓存管理器,然后获取缓存的名称,再进行相应操作

    (1)注入缓存管理器

    @Autowired
    CacheManager manage;

    (2)获取缓存,进行操作

    Cache cache = manage.getCache("emp");
    cache.put("01", emp);

  • 相关阅读:
    C++ 资源大全中文版
    C++标准库和标准模板库
    非常实用全面的 C++框架,库类等资源
    Parse陨落,开发者服务今后路在何方?
    MySQL 创始人:写代码比打游戏爽,程序员应多泡开源社区
    用callgraph生成的函数调用关系图
    Qemu对x86静态内存布局的模拟
    几篇QEMU/KVM代码分析文章
    任务执行引擎的工程
    初涉核心域
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/9548014.html
Copyright © 2020-2023  润新知