
缓存
文章平均质量分 53
关于缓存个人的学习笔记
jazon@
芜湖
展开
-
缓存常见问题
Cache Aside Pattern读的时候,先读缓存,缓存没有再读数据库,读完数据库,放入缓存,同时返回响应。更新的时候,先删除缓存,再更新数据库。缓存双写不一致先修改数据库,再删除缓存,显然不行,万一删缓存失败则缓存不一致了先删缓存,再更新数据库。能解决低并发下的情况,高并发读时容易出现缓存不一致。解决方案:用队列将写请求和读请求串行化,再通过压缩相同读与相同写的方式优化,最后再配合降级,多少时间读不到就直接读数据库,但是不更新缓存。这个优化方案需要考虑实际场景的极端情况,防止过多请求原创 2021-03-10 21:47:59 · 138 阅读 · 0 评论 -
多层缓存
多层缓存nginx本地缓存抗的是热数据的高并发访问,最热的数据,利用nginx本地缓冲,由于经常被访问,所以可以被锁定在nginx的本地缓存内。redis分布式大规模缓存抗的是很高的离散访问,支撑海量的数据,高并发访问,高可用,nginx只能cache住部分热数据,大部分流量会经常走到redis那。tomcat jvm堆内存缓存主要抗redis大规模灾难,如果redis出现了大规模宕机,导致nginx大量流量直接涌入数据生产服务,那么最后的tomcat堆内存至少可以再抗一下,不至于让原创 2021-03-10 21:43:49 · 263 阅读 · 0 评论 -
redis实践中的常见问题及解决
redis实践中的常见问题及解决1.fork耗时导致高并发请求延时RDB和AOF的时候,其实会有生成RDB快照,AOF rewrite,耗费磁盘IO的过程,主进程fork子进程,fork的时候,子进程是需要拷贝父进程的空间内存页表的,也会耗费时间,一般父进程内存有1个G的数据,那么fork可能会耗费20ms左右;如果是10G-30G,那么就会耗费几百毫秒。info stats中的latest_fork_usec可以看到,最近一次fork的时长,redis单机QPS一般在几万,fork可能一下子拖慢几万条原创 2021-03-10 21:42:51 · 180 阅读 · 0 评论 -
redis cluster
redis replication,单master数据容量有限,要支撑海量数据,只能使用redis cluster。hash算法来了一个key,计算hash值,对节点数量取模。缺陷:只要任一master宕机,那么剩下三分之二的数据都要重新哈希计算。这个很不好。在上述过程没完成前,几乎缓存100%不可用。一致性hash算法+虚拟节点哈希环,保证任何一个master宕机,只有之前在master上的数据会受到影响,因为照着顺时针走,全部在之前master上找不到了,master宕机了,会走到下一个原创 2021-03-10 21:38:14 · 116 阅读 · 0 评论 -
Redis replication哨兵
Redis replication哨兵slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量。除了 在复制完成的时候,需要删除旧的数据,加载新数据集,需要暂停对外服务,其他都可以保证服务不间断。哨兵解决redis replication高可用问题哨兵的主要功能:1.集群监控,负责监控redis master和slave进程是否正常工作。2.消息通知,如果某个redis实例有故障,那么哨兵负责发消息给系统管理员。3.故障转移,master node挂掉原创 2021-03-10 21:39:36 · 176 阅读 · 0 评论 -
redis生产环境持久化方案
redis生产环境持久化方案redis持久化机制对于生产环境的意义对于大型系统来说,缓冲通常数据量很大,如果redis宕机了,那么从数据库再载入数据到redis中会很慢的,所以持久化意义在于故障的快速恢复。RDB和AOFRDB每隔一段时间生成内存快照。AOF存储的是写指令,当redis一直写入,达到内存限制时,redis会通过LRU清理数据掉数据,此时AOF文件可能还没清理,之后redis继续写入,当AOF大到一定程度时,会基于redis的最新数据进行AOF的rewrite,重新生成AOF文原创 2021-03-10 20:39:52 · 808 阅读 · 1 评论 -
为什么要使用redis
Redis1、Redis 可以用几十 G 内存来做缓存,Map 不行,一般 JVM 也就分几个 G 数据就够大了2、Redis 的缓存可以持久化,Map 是内存对象,程序一重启数据就没了3、Redis 可以实现分布式的缓存,Map 只能存在创建它的程序里4、Redis 单点吞吐量能达到10万级,是专业的缓存服务,Map 只是一个普通的对象5、Redis 缓存有过期机制,Map 本身无此功...原创 2020-04-11 14:59:01 · 231 阅读 · 0 评论 -
布隆过滤器解决缓存穿透的原理
布隆过滤器作用告诉你某个元素一定不存在或者可能存在,相比于传统的List、Set、Map等数据结构,它更高效、占用的控件更小。数据结构布隆过滤器是一个bit向量或者bit,如果我们要映射一个值到布隆过滤器中,我们㤇使用多个不同的哈希函数生成多个哈希值,并将每个生成的哈希值指向的bit位设置为1,如下baidu一词设置了三个位置为1“tencent”一词,对应的情况可以看到,不同的词...原创 2020-04-05 12:06:01 · 5086 阅读 · 1 评论 -
缓存不一致问题分析
缓存不一致问题缓存更新的4种策略1.给缓存设置过期时间。这样缓存和数据库能保持最终一致性。2.先更新数据库,再更新缓存。问题:1.线程A更新了数据库,线程B再更新了数据库。线程B更新了缓存,线程A更新了缓存。最终结果是缓存以线程A更新的为准,数据库以线程B更新的为准,出现了不一致。2.更新了数据库就去更新缓存,实际上可能这些缓存不是热点数据,且这些缓存需要复杂的计算生成,浪费了性能。...原创 2020-04-01 21:15:27 · 883 阅读 · 0 评论