redis 和 memcache
redis: 集群高可用
考虑雪崩,提前评估db能力,做防护
微服务,数据、缓存独立,多服务之间不要共用缓存,导致耦合度高,A服务的热数据把B服务的热数据挤出去
缓存修改:失效还是删除
读: 可以缓存失效或者修改,cache hit直接返回,cache miss ,get db ,set cache,返回
对于简单型数据,比如int,string,直接set可以,成本低
对于User,html,json,修改时要先get,在反序列化或者解析,
在修改,然后序列化,在set,成本高,一般选择直接失效
具体看情况,一般直接失效,问题也不大
写: 先操作数据库,直接del缓存,如果先操作cache,
在数据库主从同步未完成之前,可能导致数据库和缓存数据不一致
缓存脏数据原因:
1、先操作缓存,后数据库
可能主从同步没有完成,写后立马读,导致读到从库脏数据,set回缓存,
这是主从同步完成,导致缓存和数据库数据不一致。可以在从库binlog完成后
主动删除缓存,保持数据一致(可以用cannal?)
2、先操作数据库,后缓存
写线程主库更新数据,删除缓存,读线程读到从库,set回缓存脏数据。
解决可以在binlog后注定删除缓存,保持一致。
主从本质解决问题:
读写分离,提升读的性能
主库写,从库读,主从 数据同步,同步有延迟,可能读取的数据不一致。
redis 是否需要高可用:
假如redis挂了,流量全部压倒数据库,不会导致雪崩,没必要高可用
redis 是否要用要固化
如果redis是指做缓存,允许cache miss,没必要固话。