redis 和 memcache

本贴最后更新于 1594 天前,其中的信息可能已经时移世改

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

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 74 关注
  • Memcached
    9 引用 • 6 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...