Springboot使用redis缓存技术

Table of Contents

 

我使用的是*.yml配置文件(冒号后必须加一个空格)

 创建RedisConfig配置缓存机制

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。如果你使用了这个注解,那么你就不需要在XML文件中配置cachemanager了。

当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。

servise层中利用注解来使用redis缓存

调用方法后数据会以key-value的形式存入redis数据库,下次在执行此方法会先从redis缓存中调取数据,提升查询速度

 


我使用的是*.yml配置文件(冒号后必须加一个空格)

#SpringBoot中使用Redis做缓存
  redis:
    host: 192.168.123.136 #填写自己的ip地址
    port: 6379
    database: 0 #设置数据库索引为0
    password: #(如果未设置密码则为空)
    jedis:
      pool:
        max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 10 # 连接池中的最大空闲连接
        min-idle: 2 # 连接池中的最小空闲连接
        timeout: 2000 # 连接超时时间(毫秒)

 创建RedisConfig配置缓存机制

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。如果你使用了这个注解,那么你就不需要在XML文件中配置cachemanager了。

当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。

package com.supervise.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();
            }
        };
    }

}

servise层中利用注解来使用redis缓存

package com.supervise.servise.impl;

import com.supervise.bean.PersonInfo;
import com.supervise.common.config.RedisService;
import com.supervise.dao.ProposeDao;
import com.supervise.dao.dboperation.PersonInfoDao;
import com.supervise.model.ProposeTableModel;
import com.supervise.servise.ProposeServise;
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 java.util.List;

@Service
@CacheConfig(cacheNames="family")(多个方法缓存时使用)
public class ProposeServiseImpl implements ProposeServise {

	@Autowired
	private ProposeDao proposeDao;

	@Autowired
	private PersonInfoDao personInfoDao;

	@Autowired
	private RedisService redisService;


	@Override
	@Cacheable("person")
	public ProposeTableModel getProposeTable(String batchId) {
		System.out.println("我执行了:getProposeTable");
	    ProposeTableModel proposeTableModel = proposeDao.findAll(batchId);
		redisService.set("第一次redis",proposeTableModel);
		return proposeTableModel;
	}


	@Override
	@Cacheable("person2")
	public List<PersonInfo> getPersonList() {
		System.out.println("我执行了:getPersonList");
        List<PersonInfo> personInfoList =  personInfoDao.selectAll();
        for(PersonInfo item : personInfoList){
			redisService.set(item.getPersonCode(),item);
		}

		return personInfoList;
	}
}

 

调用方法后数据会以key-value的形式存入redis数据库,下次在执行此方法会先从redis缓存中调取数据,提升查询速度

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值