1.在pom.xml引入依赖:
<dependency> <groupId>org.springframework.sessiongroupId> <artifactId>spring-session-data-redisartifactId> dependency>
2.在入口类Application上边添加注解
@EnableCaching //启用缓存
里边添加配置:
//实例化 RedisConnectionFactory 对象 @Bean(name = "jedisConnectionFactory") public JedisConnectionFactory connectionFactory() { return RedisConfig.connectionFactory(1); } // 实例化 RedisTemplate 对象 @Bean(name = "redistemplate") public RedisTemplate
3.在service层的类的方法上边添加对应缓存注解:
@Service @Transactional public class GroupService { @Autowired private GroupInfoMapper groupinfo; /** * 查询所有角色信息 */ @Cacheable(value = "group", key = "'groupinfoAll'+#map") public String groupinfoAll(Map map) { Listlist = groupinfo.groupinfoAll(map); String result = JsonManager.parseListToJson(list); return result; } /** * 根据角色id查询角色信息 */ @Cacheable(value = "group", key = "'selectGroupInfoById'+#groupid") public String selectGroupInfoById(String groupid) { List list = groupinfo.selectGroupInfoById(groupid); String result = JsonManager.parseListToJson(list); return result; } /** * 角色的添加和修改 */ @CacheEvict(value = "group", key = "'selectGroupInfoById'+#group.groupid") public String submitgroupInfo(GroupInfo group) { int count = 0; if (StringUtil.isEmpty(group.getGroupid())) { //判断该角色编号是否存在 String groupcode=group.getGroupcode(); if (groupinfo.selectGroupCountByNo(groupcode)!=0){ return "该编号已存在"; } group.setGroupid(PublicUtil.GetUid()); count = groupinfo.insertGroupInfo(group); } else { count = groupinfo.updateGroupInfo(group); } boolean result = count == 1 ? true : false; return String.valueOf(result); } /** * 角色的删除 */ @CacheEvict(value = "group", allEntries = true) public String deleteGroupInfo(String groupid) { int userCount = groupinfo.selectUserRoleCount(groupid); if (userCount != 0) { return "该角色还有" + userCount + "用户存在"; } if (groupinfo.selectGroupMenuCount(groupid) != 0) { if (groupinfo.deleteGroupMenu(groupid) != 1) { return "删除角色菜单表失败"; } } if (groupinfo.deleteGroupInfo(groupid) != 1) { return "删除角色信息表失败"; } return "true"; } /** * 分配权限 * * @return */ @CacheEvict(value = "menuinfo", allEntries = true) public String distributionAuth(String groupid, String menulist) { //删除groupmenu 表中的guoupid 的数据 groupinfo.deleteGroupMenu(groupid); String[] menulists = menulist.split("[,]"); int length = menulists.length; //遍历menulist,将menulist添加到groupmenu中 for (int i = 0; i < length; i++) { HashMap map=new HashMap(); map.put("groupid",groupid); map.put("menuid",menulists[i]); if (groupinfo.insertGroupMenu(map)!=1){ return "更新权限失败"; } } return "true"; } }
5.启动项目。
PS:安装
缓存的注解说明:
1.使用@CacheEvict注解
@CacheEvict注解表示如果用户查询的数据已经保存在缓存中时则清空缓存,往往用于修改用户数据时使用。
例如下面的例子,如果account=001的用户数据在缓存中已经存在了,就会清空key=001的缓存,如果没有则不做处理。
@CacheEvict
方法执行成功后会从缓存中移除相应数据。
参数: value缓存名、 key缓存键值、 condition满足缓存条件、 unless否决缓存条件、 allEntries是否移除所有数据(设置为true时会移除所有缓存)
@CacheEvict(value = "user", key = "#user.id") // 移除指定key的数据
public User delete(User user) {
users.remove(user);
return user;
}
@CacheEvict(value = "user", allEntries = true) // 移除所有数据
public void deleteAll() {
users.clear();
}
2.使用@Cacheable注解
@Cacheable注解主要有两个作用
1)如果用户请求的数据已经被缓存,使用@Cacheable可以直接返回缓存数据
2)如果用户请求的数据没有被缓存,将执行Controller的方法,将查询结果保存在缓存中。例如在下面的例子中,以user.account作为查询缓存的key值。
@Cacheable(value = "user", key = "#id")
public User findById(final Long id) {
System.out.println("cache miss, invoke find by id, id:" + id);
for (User user : users) {
if (user.getId().equals(id)) {
return user;
}
}
return null;
}
3.@CachePut
和 @Cacheable 类似,但会把方法的返回值放入缓存中, 主要用于数据新增和修改方法。
@CachePut(value = "user", key = "#user.id")
public User save(User user) {
users.add(user);
return user;
}