基本架构:mybatis、springmvc、spring、maven
缓存:redis
缓存的使用就是为了提高效率,避免重复的IO操作浪费效率。
查询时使用,如selectById
value:缓存区名称,key:在缓存区内对应的键,
表示查询缓存区“user”中key为参数id的缓存,如果没有则查询数据库,并把数据放入缓存中(注意这里缓存的数据是指方法执行完成返回的结果),以后直接从缓存取数据。
@Cacheable(key = "#id", value = "user")
查询时使用,如getAll
value:缓存区名称,key:没有指定采用默认生成策略(本项目使用:cn.my.base.RedisCacheConfig)
@Cacheable(value = "users")
插入数据使用:@CachePut注解的方法一定会执行,不管有没有缓存,方法的返回值放入缓存中
@CachePut(value = "user", key = "#user.id")
删除、更新时使用:beforeInvocation=true表示不管方法执行是否成功,在方法执行之前删除缓存
这里注意缓存一定要删除干净,不仅要删除“user”缓存区,还要删除“users”缓存区
@CacheEvict(key = "#user.id", value = "user", beforeInvocation = true)
@CacheEvict(value="users",allEntries=true,beforeInvocation=true)
像上边这种一下执行两条及以上缓存操作的,要用组合缓存操作,即改为
@Caching(
evict={
@CacheEvict(key = "#user.id", value = "user", beforeInvocation = true),
@CacheEvict(value="users",allEntries=true,beforeInvocation=true)
}
)
service:
package cn.my.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import cn.my.base.BaseDao;
import cn.my.base.BaseServiceImpl;
import cn.my.dao.UserMapper;
import cn.my.model.User;
import cn.my.service.UserService;
@Service
public class UserServiceImpl extends BaseServiceImpl implements UserService
{
@Resource
private UserMapper userMapper;
@Override
public BaseDao getDao()
{
return userMapper;
}
/**
*
* @Description: 获取全部
* @throws
* @author kang
* @date 2016年4月25日
*/
@Cacheable(value = "users")
public List getAll()
{
return userMapper.selectByExample(null);
}
/**
*
* @Description: 插入数据
* @throws
* @author kang
* @date 2016年4月21日
*/
@Override
@Caching(//
put = {@CachePut(value = "user", key = "#user.id")},//
evict = {@CacheEvict(value = "users", allEntries = true, beforeInvocation = true)}//
)
public User insert(User user)
{
userMapper.insertSelective(user);
return user;
}
/**
*
* @Description: 查询
* @throws
* @author kang
* @date 2016年4月21日
*/
@Override
@Cacheable(key = "#id", value = "user")
public User selectById(String id)
{
return super.selectById(id);
}
/**
*
* @Description: 更新
* @throws
* @author kang
* @date 2016年4月21日
*/
@Override
@Caching(//
evict = {@CacheEvict(value = "user", key = "#user.id", beforeInvocation = true),//
@CacheEvict(value = "users", allEntries = true, beforeInvocation = true)//
})
public User update(User user)
{
return super.update(user);
}
/**
*
* @Description: 删除
* @throws
* @author kang
* @date 2016年4月21日
*/
@Override
@Caching(//
evict = {@CacheEvict(value = "user", key = "#id", beforeInvocation = true),//
@CacheEvict(value = "users", allEntries = true, beforeInvocation = true)//
})
public int delete(String id)
{
return super.delete(id);
}
}
实例完整项目下载:点击打开链接