缓存使用规范
jimDb
参考资料
JIMDB最佳实践
- 【强制】防止缓存穿透风险,对于不存在值需要在缓存中写入
空值
进行占位,并设置过期时间,或使用布隆过滤器前置过滤。 - 【强制】涉及到交易流程的核心系统缓存必须双机房热备。
- 【强制】确保各平台缓存独立,避免相互影响。
- 【推荐】缓存变更策略,先删除
redis
再更新数据库。先淘汰缓存,保证数据的真实性。 - 【强制】缓存存储不能使用二进制序列化方式
- 【推荐】不要求数据强一致的用户,可启用客户端本地缓存。
- 【推荐】一次业务调用需要访问多次redis服务端,导致OPS/QPS成倍增长,应尽量避免,采用pipleline或其它批量操作方式。
- 【强制】PipelineClient是非线程安全的,不同线程需要通过client.pipelineClient()构造不同的实例进行相关操作。使用完毕之后,一定要确保会调用close释放链接。
- 【推荐】大List,Set,Hash,存储的数量巨大。获得大量元素时延迟较大阻塞其他命令.建议切割成多个小的list,set,hash。
- 【推荐】大String,value大于20K,当ops为10000,流量会达到200M,很容易打满服务端带宽配额,阻塞其他命令执行,建议value尽量较小。
- 【推荐】一段时间仅访问少量的几个分片,客户端会不停的新建,销毁连接。建议调整连接池配置,增大最大空闲连接数,空闲连接存活时长。
- 【推荐】 推荐使用
Guava
的@SerializedName
注解或者FastJSON
的@JSONField
注解将序列化后的KEY
变短,减少缓存容量。 具体如何使用见这里
本地缓存
1.【强制】缓存容量控制,使用(如guava
,ehcache
)必须设置缓存容量上限