hymn

忽有故人心头过,回首山河已是秋。

  menu
132 文章
0 浏览
1 当前访客
ღゝ◡╹)ノ❤️

redis 和 memcache

redis 和 memcache

| redis:支持持久化 | mc:不支持 |
| - | - |
| 单线程 | 多线程 |
| 内存分配采用临时申请 | 内存预分配 |
| 内存VM,数据量超量时,会引发swap | 存储在物理内存 |
| 支持KV,V可以是string,map,list,set,SortSet | 只支持KV |
| 天然高可用,支持集群 | 要二次开发,做集群 |
| value无限制 | value最大1M |

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,没必要固话。

标题:redis 和 memcache
作者:hymn
地址:https://www.dxyhymn.com/articles/2020/06/24/1592993220829.html