基于AOP与Redis技术实现mysql,redis数据库中数据操作。
基于id查询菜单信息,要求:
1、先查redis,redis中没有再去查mysql.
2、将mysql查询到的数据存储到redis中。
业务类实现查询,新增,更新三个方法
ValueOperations vo = redisTemplate.opsForValue();--指定value序列化方式。
package com.jt.redis.service;
import com.jt.redis.dao.MenuMapper;
import com.jt.redis.pojo.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import java.time.Duration;
@Service
public class MenuServiceImpl implements MenuService{
@Autowired
private MenuMapper menuMapper;
@Autowired
private RedisTemplate redisTemplate;
@Override
public Menu selectBy(Long id) {
// 1、基于id查询redis,
ValueOperations vo = redisTemplate.opsForValue();
Object obj = vo.get(String.valueOf(id));
if (obj!= null){
return (Menu)obj;
}
Menu menu = menuMapper.selectById(id);
vo.set(String.valueOf(id), menu, Duration.ofSeconds(10));
return menu;
}
@Override
public Menu insertMenu(Menu menu) {
// 1、写MySQL
menuMapper.insert(menu);
// 2、写redis
ValueOperations vo = redisTemplate.opsForValue();
vo.set(String.valueOf(menu.getId()), menu);
return menu;
}
@Override
public Menu updateMenu(Menu menu) {
// 1、更新MySQL
menuMapper.updateById(menu);
// 2、更新redis
ValueOperations vo = redisTemplate.opsForValue();
vo.set(String.valueOf(menu.getId()), menu);
return menu;
}
}
@Cacheable 注解描述的方法为一个缓存切入点方法
@Cacheable(value = "menuCache",key = "#id")---这里的value值是自定义的,key是要传送的id。
@Qualifier(value = "defaultMenuService")---@Qualifier注解的用处:当一个接口有多个实现的时候,为了指名具体调用哪个类的实现。
?使用@resource注入时比较简单了注解自带了“name”的val,也就是根据属性注入的,
|