15. 缓存, Redis分布式锁及Redis面试题

1.缓存

当执行增删改操作时,必须保证缓存和数据库数据的一致性。----删除缓存

StudentServiceImpl

@Service
public class StudentServiceImpl implements StudentService {
 
    @Autowired
    private StudentMapper studentMapper;
 
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
 
    @Override
    public Student getById(Integer id) {
        ValueOperations<String,Object> forValue = redisTemplate.opsForValue();
        //1.查询缓存
        Object o = forValue.get("student::" + id);
        if(o!= null){ //缓存命中
            return (Student) o;
        }
        Student student = studentMapper.selectById(id);
        //2.查询到应放入缓存
        if(student != null){
            forValue.set("student::"+id,student);
        }
        return student;
    }
 
    //增
    @Override
    public Student insert(Student student) {
        //新增的数据 缓存中肯定没有,所以不用删除
        int insert = studentMapper.insert(student);
        return student;
    }
 
    //删
    @Override
    public Integer delete(Integer id) {
        //先删除缓存,在删除数据库中的数据
        /**
         
         * 需要缓存与数据库中数据保持一致
         * */
        redisTemplate.delete("student::"+id);
        int i = studentMapper.deleteById(id);
        return i;
    }
 
    //改
    @Override
    public Student updatet(Student student) {
        //修改先删除缓存中的数据
        redisTemplate.delete("student::"+student.getSid());//缓存与数据库中的数据保持一致
        int update = studentMapper.updateById(student);
        return student;
    }
}

StudentController

@RestController
@RequestMapping("student")
public class StudentController {
 
    @Autowired
    private StudentService studentService;
 
    @GetMapping("getById/{id}")
    public Student getById(@PathVariable Integer id){
        return studentService.getById(id);
    }
     //增加
    @GetMapping("insert")
    public Student insert(Student student){
        return studentService.insert(student);
    }
 
    //删除
    @GetMapping("delete/{id}")
    public Integer delete(@PathVariable Integer id){
        return studentService.delete(id);
    }
 
    //修改
    @GetMapping("update")
    public Student update(Student student){
        return studentService.updatet(student);
    }
}

2、Redis使用分布式锁

2.1 .1版本

 entity  (pojo)

@Data
@TableName(value = "product")
public class Stock {
    @TableId(type = IdType.AUTO)
    private int productid;
    private Integer num;
}

dao

@Mapper
public interface StockDao extends BaseMapper<Stock> {
}

service

@Service
public class StockService_lock_syn {
    @Autowired
    private StockDao stockDao;
 
    public static O
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值