springboot1.X + redis来进行数据的缓存

springboot1.5.12 + redis + mybatis 来进行数据的缓存

demo演示


开发者的使用

1. 需要我们使用的分别是这几个注解
 @CacheConfig------------------来命名使用的cache的名字
 @Cacheable---------------------将返回的数据放入缓存
 @Cacheput----------------------执行方法,并将方法返回值放入缓存	
 @CacheEvict-------------------删除缓存内数据
 @Caching-----------------------配置复杂的缓存

对于注解,我的使用是这样的,详细的用法请查看demo演示
@Service
@CacheConfig(cacheNames = "redis")
public class RedisService {
	 /**
     * 设置redis内存储的内容
     * @param key
     * @param value
     */
    @Cacheable(key = "#key")
    public String stringCache(String key, String value){
        return value;
    }
	/**
	*更新数据
	*/
	 @CachePut(Key = "#employee.id")
    public Employee updateEmp(Employee employee){
        System.out.println("updateEmp:"+employee);
        employeeMapper.updateEmp(employee);
        return employee;
    }
	/**
	*清除cache名字为emp下的所有数据
	*/
	@CacheEvict(allEntries = true)
	public void clear(){}
	
 // @Caching 定义复杂的缓存规则,每次查询,都会执行下面的方法,因为里面使用了CachePut的方法
    @Caching(
         cacheable = {
             @Cacheable(key = "#lastName")
         },
         put = {
             @CachePut(key = "#result.id"),
             @CachePut(key = "#result.email")
         }
    )
    public Employee getEmpByLastName(String lastName){
        return employeeMapper.getEmpByLastName(lastName);
    }
 }

构建redis缓存的搭建者

需要我们配置一下,关于FastJsonRedisSerializer我重写了它的方法,具体请看demo演示对于序列化可能会遇到的问题
@Configuration
public class MyRedisConfig {

    /***
     *  1.直接使用GenericJackson2JsonRedisSerializer,就可以实现在redis内的json存储以及获取
     *  2.使用FastJsonRedisSerializer默认是不支持自动类型转换,因为可能被坏人利用,如果需要建议指定对应路径(从java文件夹路径开始),需要配置 ParserConfig.getGlobalInstance().addAccept("com.atguigu.cache.bean");
     *  3.不建议使用Jackson2JsonRedisSerializer<Object> ,会出现java.util.LinkedHashMap cannot be cast to com.atguigu.cache.bean.Employee
     * @param redisConnectionFactory
     * @return
     * @throws UnknownHostException
     */
    @Bean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
        template.setConnectionFactory(redisConnectionFactory);
        //直接使用GenericJackson2JsonRedisSerializer
//        GenericJackson2JsonRedisSerializer ser = new GenericJackson2JsonRedisSerializer();
        // FastJsonRedisSerializer默认是不支持自动类型转换,因为可能被坏人利用,如果需要建议指定对应路径(从java文件夹路径开始),
//        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
        ParserConfig.getGlobalInstance().addAccept("com.atguigu.cache.bean");
        FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
        //将缓存的数据,key 和value 进行格式化成json
        template.setDefaultSerializer(fastJsonRedisSerializer);
        return template;
    }


    /**
     * 设置cache内数据的缓存时间,只会影响注解生成的数据比如@Cacheable,并不会对自己创建的K-V产生影响,
     * @param redisTemplate
     * @return
     */
    @Bean(name = "redisCacheManager")
    public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        //默认使用cacheNames作为key的前缀
        cacheManager.setUsePrefix(true);
        //设置缓存过期时间(秒)
        cacheManager.setDefaultExpiration(120);
        return cacheManager;
    }
    
    /**
     * 配置cache的key的生成规则
     * @return
     */
    @Bean("myKeyGenerator")
    public KeyGenerator keyGenerator(){
        return new KeyGenerator(){
            @Override
            public Object generate(Object target, Method method, Object... params) {
                return method.getName()+"["+ Arrays.asList(params).toString()+"]";
            }
        };
    }
}
	
最后你可能要自己操作redis,那么建议你使用demo里面的RedisUtil来进行操作。

如果有什么问题,欢迎大家提问哈。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值