doc[zfoo]: 增加注释

This commit is contained in:
jaysunxiao
2021-07-30 14:04:11 +08:00
parent a8c1f10f34
commit e1945eaf4b
2 changed files with 13 additions and 1 deletions
@@ -29,13 +29,14 @@ import java.util.concurrent.TimeUnit;
import java.util.function.Function;
/**
* caffeine是guava cache的威力增强版。
* caffeine的缓存都是单个存,单个更新,但是实际的项目很多都是批量查询,批量更新。
* <p>
* 优势:
* 1.支持批量查找,批量更新。
* 2.可以防止缓存穿透,缓存击穿,缓存雪崩
* <p>
* 当查找的key不存在的时候,返回defaultValue,并且将defaultValue放入缓存。所以通过
* 批量查找通过batchReloadCallback方法查找,当查找的key不存在的时候,调用defaultValueBuilder生成一个默认值放入缓存。
*
* @author jaysunxiao
* @version 3.0
@@ -27,6 +27,17 @@ public interface IEntity<PK extends Comparable<PK>> {
/**
* 一个文档的写入到数据库的version版本,version的get和set方法
* <p>
* 写入一条数据到数据库的时候会对比以下老的vs和数据库的vs是不是一样,不是一样的话无法写入,一致的话就写入数据并且让vs自增+1.
* 主要是为了防止多个服务器去操作同一条数据,保证分布式环境的数据一致性,就是一个数据版本号的简单实现,版本号一致才能写入数据。
* 在分布式环境的那种有状态服务器中会遇到,比如网关路由一个玩家的数据到a服务器,这个时候你加了一个b服务器,有可能下一条数据就被路由到b。
* 虽然用了一致性hash的负载均衡算法,但是一样有概率会让某些消息路由到不同服务器。
* 这个时候版本号就可以保住只有一台服务器可以对数据库做操作,不用担心多个服务器去操作数据。
* 这是一个容错的操作,真实环境下很少发生。为了高性能必须要把服务器做成有状态的,这个容错操作就是最后一道保证数据一致的方案。
* mongodb更新的时候是原子的,并发更新同一条数据只有一条数据会写入,第二条数据写入的时候版本号已经不一致了,所以老版本号的数据无法写入。
* 写入的时候只要发现版本号不一致,就让缓存失效,重新读取数据库最新的数据。
* <p>
* 分布式环境下,要想服务器性能好,就要做成有状态的,有状态就要遇到这种多服对同一条数据写入问题,这是一个千古难以解决的问题,进退两难。
*/
default long gvs() {
return 0L;