关于有数缓存的一些小知识
关于有数缓存的一些小知识
数据连接缓存和数据模型缓存的区别:
不需要两者都设置缓存有效期,按需配置。如果已经设置了数据连接的缓存有效期,那么缓存到期后,数据连接相关的资源(包括数据模型),会重新生成新的缓存。所以不需要再对数据模型设置缓存有效期。 数据连接缓存和数据模型缓存的区别在于
数据连接缓存有效期只是清理缓存, 数据模型的刷新会清除老的缓存,保留新的缓存。
关于数据连接定时刷新的一些解释:
有数本身有排队,但是有数的排队是任务排队,和数据库的承受能力是不一样的。比如一次数据模型刷新涉及有100个报告,有数分为10个一次,一共10次,按照设定的刷新时间有序发出,比如每1s10次,连续10s;而你的数据库本身对于查询也有排队,依次查询后返回(根据你的数据库响应能力,有数并不会等待返回以后才发出后续的请求,要不然就会导致实际刷新时间和设定时间不一致),所以大多数情况下,不建议使用数据连接刷新和模型刷新
什么情况下有数才会去缓存?
有数的缓存方式有两种:
1、用户主动触发生成缓存
用户A今天查看了一个报告,如果用户今天第二次打开这个报告的时候,他就会看到缓存的数据。因为用户第一次访问了这个报告有数就生成了这个用户对应的缓存。这个属于用户主动触发
2、有数主动模拟用户行为缓存
- 抽取缓存预加载和报告的刷新计划就属于有数主动模拟用户行为进行缓存。
当抽取任务完成之后,有数会检测这个抽取任务关联的所有报告,在根据报告的访问情况,主动下发SQL语句去生成多份缓存(只要用户访问了这个报告就会生成对应的缓存),同理刷新计划也是同样的逻辑会只要用户访问了这个报告就会生成多份缓存。
什么样的用户不会生成缓存
如果用户A 15天内没有访问过这个报告B,有数在缓存报告B的时候就不会缓存用户A的数据。
缓存失效点过了之后,对于用户主动触发生成的缓存的这批用户是不会被缓存的
举例:缓存失效点设置为00:00,用户A在当天查看了这个报告,有数就会生成用户A的缓存,只要用户在当天打开报告就会命中缓存。当过了缓存失效点,到了第二天,因为这个用户在第二天还没有查看这个报告,所以这个用户A就不会命中缓存,他就会落库去查询。
刷新计划和数据连接的缓存哪个优先级比较高?
- 数据连接的缓存失效点为3小时,中间我又执行了刷新计划,那么这个时候报告缓存的是刷新计划执行之后的数据还是数据连接之前缓存的数据?
答:是刷新计划执行之后的数据。
- 数据连接的缓存失效点已经过了,并且生成了新的缓存数据A,这个时候在执行刷新计划生成了一份新的缓存数据B,这个时候报告命中的是什么样的缓存数据?
答:报告命中的是缓存数据B,刷新计划会把之前缓存的数据A给清理掉
刷新计划和数据连接的缓存是否一样?
是一样的,也是会根据用户行为缓存多份数据。
以上内容对您是否有帮助?