缓存
Caching缓存
作为数据库与客户端交互的中间数据缓冲层。当进行数据预览和下载时,客户端通过连续向缓存获取数据,缓存不断从数据库获取数据进行缓存,达到数据缓存的目的。
案例1:
需要统计一个月数据,从数据库统计数据大致有30w行。因此需要分页查询然后进行下载到本地。
解析:
1.将查询请求提供给缓存区。
2.缓存区统计总行数。并返回给客户端
3.并开启异步进行下一页的查询数据,缓存到缓冲区。
4.客户端获取统计总行数后,计算下载完整百分比,保留下载中的状态。
5.客户端继续请求下面的页数,直到获取完毕。
6.把所有页数数据整合打包成流进行下载。

Redis和Memory缓存,它都将占用服务器内存。如果资源持续增加而不主动释放,服务器资源会持续扩大。造成资源浪费。
因此作为缓存部分,不仅要及时缓存还要及时释放资源。
## Redis缓存场景特色:
### 1.时效性比较高
### 2.存储量比较小
### 3.访问比较频繁
### 比如限流、消息队列、分布式锁、常用配置、数据统计的数据可以用Redis.

Memory缓存常用于程序内部的资源交互。
## Memory缓存场景特色
### 1.共享性比较多
### 2.存储量比较稳定
### 3.数据变化少
### 比如字典、分类、等级、地区、类型、积分等少量数据可以用Memory

除此之外还有2种缓存:MongoDB和Lucene
MongoDB是文档结构存储的数据库。其高性能虽不及redis,但也是高性能存储器。
MongoDB常用于海量数据筛选和存储,它是一个文档结构性数据库。
## MongoDB场景特色
### 1.适合实时数据更新
### 2.大量数据查询
### 比如购物车、用户信息等持久化数据可以用MongoDB

Lucene常用于海里数据筛选,它是一个文档结构性搜索服务
## Lucene场景特色
### 1.日志存储和筛选
### 2.商品筛选
### 比如程序异常、http上下文监控、商品筛选、文章等数据可以用Lucene

Redis虽说是高性能但也会出现一系列的问题:
1.比如当读取到一个缓存和数据库数据都是空的时候,可能就会一直读数据库,当然这样并不会有什么问题;
但如果在循环中使用Redis读取,读取不到读数据库,这个问题就很大了。
2.还有就是设置缓存时,缓存时间超过100年,这种问题也会造成异常问题。当然程序不会去这样设置。
但如果是根据客户端输入的日期去最终保存缓存日期,这样就有问题了。
3.设置缓存时,如果缓存的数据突然变成200mb,那么你取读取200mb的缓存,这样可能会导致卡崩。
4.不小心把缓存全部清掉,或者服务器重启等原因,导致redis缓存丢失,这样服务器应用可能就殆机。
针对这一系列的问题,那么可以做的是redis尽量不要直接关联主数据库,连读库,这样对数据库影响最小;
设置缓存时验证时长、缓存大小值是否合理。缓存失效和清理,应该使用统一的注销方法。按顺序注销或初始化。


浙公网安备 33010602011771号