zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    对象不支持“split”属性或方法
    js中加减乘除遇到小数时的位数问题
    js 日期增加
    使用JavaScript的XMLHttpRequest发送请求
    Jquery弹出框以及跟随页面滚动
    sql导出excel数据量过大的处理(需解决)
    PowerDesigner 12.5 导致的 Office Word 2007 鼠标在文档中无效的问题
    检测字符串是否是数字
    两张表合并加标识根据ID
    left outer join 和 right outer join 和 join 的区别
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/9548014.html
Copyright © 2011-2022 走看看