mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-09-02 14:21:25 +00:00
doc[zfoo]: 增加注释
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user