rebis的使用场景
1. 作为缓存
- 缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存汇总查询数据,有则直接执行,不存在时从内存中获取。由于缓存的数据比内存快的多,所以缓存的作用就是帮助硬件更快的运行。
- 缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到硬盘等存储器中永久存储。电脑中最大缓存就是内存条,硬盘上也有16M或者32M的缓存。
- 高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。一般CPU工作速度高,但内存的工作速度相对较低,为了解决这个问题,通常使用高速缓存,高速缓存的存取速度介于CPU与主存之间。系统将一些CPU在最近几个时间段经常访问的内容存在高速缓存,这样就在一定程度上缓解了由于主存速度低造成的CPU“停工待料”的情况。
- 缓存就是把一些外存上的数据保存在内存上而已,为什么保存在内存上,我们运行的所有程序里面的变量都是存放在内存中的,所以如果想将值放入内存上,可以通过变量的方式存储。在JAVA中一些缓存一般都是通过Map集合来实现的。
- 缓存在不同的场景下,作用是不一样的具体举例说明:
- 操作系统磁盘缓存 ——> 减少磁盘机械操作。
- 数据库缓存——>减少文件系统IO。
- 应用程序缓存——>减少对数据库的查询。
- Web服务器缓存——>减少应用服务器请求。
- 客户端浏览器缓存——>减少对网站的访问。
- 缓存在不同的场景下,作用是不一样的具体举例说明:
1.1 为什么使用缓存
(1)提高性能:缓存查询速度必数据库查询速度快(内存vs硬盘)
(2)提高并发能力:缓存分担了部分请求,支持更高的并发
1.2 什么样的数据适合放入到缓存中
热点数据
修改频率比较低
安全系数低的
缓存的原理:
怎么使用缓存:
(1)搭建一个springboot+mp的工程
(2)引入redis相关的依赖
(3)配置redis
(4)service代码
2. redis作为分布式锁
2.1代码实现
表示:
- 先从Redis中读取stock的值,表示商品的库存
- 判断商品库存是否大于0,如果大于0,则库存减1,然后再保存到Redis缓存中里面去,否则就提示“库存不足”
package com.hong.service.impl;
import com.hong.dao.StockDao;
import com.hong.entity.Stock;
import com.hong.service.StockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @Author hongCheng
* @Date 2021/4/16 15:39
* @Version 1.0
*/
@Service
public class StockServiceImpl implements StockService {
@Resource
private StockDao stockDao;
@Override
public String findById(Integer productId) {
//根据id查询stock信息
Stock stock = stockDao.selectById(productId);
if (stock.getNum() > 0) {
//修改数量,数量-1
stock.setNum(stock.getNum() - 1);
//根据获取到的stock对象,再根据id修改数量
stockDao.updateById(stock);
System.out.println("库存剩余数量:" + stock.getNum());
return "库存减少成功";
}
return "库存不足";