2016-09-06 17:16
以上关于缓存粒度的问题细节不再多说,下面给出在使用缓存时的一些经验:
1:先假定缓存不存在,先实现功能,业务功能不依赖于缓存,缓存只作为一个辅助
2:引入业务层,将所有业务放在业务层之中,并且极度重要的是对于某个 model 的数据库操作尽可能放在这个 model 所对应的业务中,不要要数据库操作散步到其它业务中。 好处是当前业务可以很方便地维护自己该负责的缓存,例如:project 这表表对应的是 ProjectService,里面有 getById、deleteById、update 这样的方法,当用户使用 getById 的时候先是从缓存取,缓存没有的时候则从数据库取并存入缓存。然后 deleteById、update 这样的方法中,只需要 remove 掉相应的缓存就可以了,下次 getById 到来时自然会去库中得到最新数据。其它业务需要使用 project 数据时,只能通过 ProjectService 来获取,这样的话,整个 project 的缓存逻辑全部只由 ProjectService 负责,对外界是透明的,极度可靠
2016-09-05 16:03
@林栋 用 count 获取,你需要在私信等需要生成提醒的字段中添加字段,例如添加一个 isRead 字段,然后你需要维护这个字段,数据量大以后这个字段会占用一定空间,并且 count 也需要消耗性能
referMe 到来的时候字段加 1 ,不是关键数据,多出一个少出一个无所谓,而且这个值是访问后立即清零的,相当于随时能回到正确的状态,你在实践中去写代码的时候就能体会现这样设计的好处
2016-09-05 15:57
@林栋 所以静态资源全用的 nginx 接管,例如 css、js、jpg、png 等等,nginx 只需要设置 root /var/www/jfinal_com 即可,整体覆盖是指打包成 war 包以后,再用 war 包中的文件覆盖全部,当然,有时候会为了去掉一些不用的文件,是将原来部署的文件,只保留 upload 目录,其它全部删掉
2016-09-05 14:36
@Romeo 不用手动 new,放在业务层就好,没有人会这么用:UserService.me().dao.save(),但有人会这么用: User.dao.save()