本系列将和大家分享Redis分布式缓存,本章主要简单介绍下Redis中的布隆过滤器(BloomFilter),以及如何破解ServiceStack和如何解决缓存雪崩、缓存穿透、缓存击穿、缓存预热问题。话不多说,下面我们直接进入主题。一、ServiceStack破解首先我们先来看一下Demo的目录结构,如下所示:第一种方式:我们通过NuGet安装ServiceStack相关的程序包。然后在 MyRedis控制台项目中运行如下测试代码://////模拟抛出LicenseException异常///publicstaticvoidThrowLicenseException(){//模拟1小时内超过6
一、介绍每场后端面试,似乎都少不了关于redis的话题,比如项目使用过哪些分布式缓存服务,为什么要使用redis,有没有碰到过缓存失效、缓存穿透、缓存雪崩等问题。在前几篇关于redis的介绍文章中,我们说到项目中之所以会引入分布式缓存服务,主要是为了解决集群环境下,内存数据不共享的问题,比如session会话,以及一些字典缓存等等,在当前服务器的内存中存储,在另一台服务器中难以获取查询的问题,通过引入缓存服务,将缓存数据统一归一到一个服务器里面,以解决系统中内存数据不共享的问题,同时缓存性能也不会受到很大影响。当然软件开源市场上,也有很多的分布式缓存服务,比如比较有名的有redis、memc
一、介绍每场后端面试,似乎都少不了关于redis的话题,比如项目使用过哪些分布式缓存服务,为什么要使用redis,有没有碰到过缓存失效、缓存穿透、缓存雪崩等问题。在前几篇关于redis的介绍文章中,我们说到项目中之所以会引入分布式缓存服务,主要是为了解决集群环境下,内存数据不共享的问题,比如session会话,以及一些字典缓存等等,在当前服务器的内存中存储,在另一台服务器中难以获取查询的问题,通过引入缓存服务,将缓存数据统一归一到一个服务器里面,以解决系统中内存数据不共享的问题,同时缓存性能也不会受到很大影响。当然软件开源市场上,也有很多的分布式缓存服务,比如比较有名的有redis、memc
雪崩比如电商系统首页等会放在redis中的数据若过期时间设置为同一时间那么也会同一时间过期所以会导致过期时间到的那一刻假设有6000个请求到首页,那么DB必然扛不住,挂掉maybe,重启数据库又被新的流量给打死了。这就是一个雪崩场景。比如崩的是一个用户系统,那么依赖于用户的模块也会报错,如果没有做熔断,那么需要重启服务,就丢失了使用人群。解决办法:1给redis设置随机失效时间2给redis不加过期时间,更新数据时更新缓存3redis集群部署,将热点数据均匀分布在不同的redis库中也可以避免全部失效的问题。--需要实践击穿一个高可用的key过期时扛不住高并发的请求导致的DB死了解决办法:设置
雪崩比如电商系统首页等会放在redis中的数据若过期时间设置为同一时间那么也会同一时间过期所以会导致过期时间到的那一刻假设有6000个请求到首页,那么DB必然扛不住,挂掉maybe,重启数据库又被新的流量给打死了。这就是一个雪崩场景。比如崩的是一个用户系统,那么依赖于用户的模块也会报错,如果没有做熔断,那么需要重启服务,就丢失了使用人群。解决办法:1给redis设置随机失效时间2给redis不加过期时间,更新数据时更新缓存3redis集群部署,将热点数据均匀分布在不同的redis库中也可以避免全部失效的问题。--需要实践击穿一个高可用的key过期时扛不住高并发的请求导致的DB死了解决办法:设置
使用场景减低后端负载:对高消耗的SQL结果进行缓存,例如join结果集/分组统计结果加速请求响应大量写合并为批量写,如计数器先Redis累加再批量写到DB缓存更新策略LRU(LeastRecentlyUsed),根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高,则延迟其淘汰时间”-LRU缓存更新LFU(LeastFrequentlyUsed)根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”-LFU缓存更新FIFO,根据"先进先出"思想来更新缓存数据超时剔除-expire主动更新-开发控制生命
使用场景减低后端负载:对高消耗的SQL结果进行缓存,例如join结果集/分组统计结果加速请求响应大量写合并为批量写,如计数器先Redis累加再批量写到DB缓存更新策略LRU(LeastRecentlyUsed),根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高,则延迟其淘汰时间”-LRU缓存更新LFU(LeastFrequentlyUsed)根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”-LFU缓存更新FIFO,根据"先进先出"思想来更新缓存数据超时剔除-expire主动更新-开发控制生命