当前位置: 首页 > news >正文

有在网上找做网站的人么wordpress rate

有在网上找做网站的人么,wordpress rate,做社区网站怎么做,2021最近最火的关键词前言#xff1a; 在如今的开发中#xff0c;使用缓存中间件Redis已经成为一项很广泛的技术#xff0c;Redis的高性能大大优化了我们的服务器性能#xff0c;缓解了在高并发的情况下服务器的压力。它基于缓存的形式#xff0c;在内存中保存数据#xff0c;减少对磁盘的IO操…前言 在如今的开发中使用缓存中间件Redis已经成为一项很广泛的技术Redis的高性能大大优化了我们的服务器性能缓解了在高并发的情况下服务器的压力。它基于缓存的形式在内存中保存数据减少对磁盘的IO操作。然而尽管Redis有着很多的优点但仍然有三朵乌云漂浮在Redis的上空穿透击穿雪崩。而我们今天就把焦点聚焦于Redis的穿透问题。 目录 前言 什么是Redis的穿透问题 布隆过滤器 基于Spring Boot实现布隆过滤器 总结 什么是Redis的穿透问题 Redis的穿透问题是指当应用程序查询一个不存在于缓存中的数据时请求会直接穿透到后端存储系统如数据库导致缓存无法发挥作用增加了后端负载并降低了系统性能。 穿透问题通常发生在以下情况下 缓存击穿某个热门数据在缓存过期后被大量并发请求访问此时缓存失效请求会直接访问后端存储系统导致后端负载过高。恶意攻击有意发送不存在的数据请求以触发系统的请求流量浪费服务器资源。 为了解决Redis的穿透问题可以采取以下措施 布隆过滤器Bloom Filter使用布隆过滤器可以在缓存层面进行快速的数据存在性检查。布隆过滤器是一种概率型的数据结构可以高效地判断一个元素是否可能存在于集合中通过在缓存层进行预先判断可以防止不存在的数据请求直接穿透到后端存储系统。 空值缓存对于后端存储中不存在的数据可以将其在缓存中设置为空值缓存即存储一个特殊的空值标识。这样在下一次查询该数据时即使缓存中为空值标识也可以避免请求直接穿透到后端存储系统。 互斥锁Mutex当缓存失效时可以使用互斥锁来保护后续的查询操作。在获取到锁之后再从后端存储系统加载数据到缓存中。其他并发请求会等待锁的释放避免了多个请求同时穿透到后端存储系统。 热点数据预加载对于热门数据可以在系统启动时或低峰期通过批量查询或模拟请求将其提前加载到缓存中避免缓存冷启动时的穿透问题。 异步更新缓存当缓存失效后可以异步地从后端存储系统加载数据到缓存中而不是阻塞请求等待数据加载完成。这样可以减少请求的等待时间提高系统的响应速度。 需要根据具体的业务场景和系统需求选择合适的解决方案综合考虑性能、复杂度和数据准确性等因素以确保Redis的穿透问题得到有效解决。 而我们今天就来详细介绍一下布隆过滤器 布隆过滤器 我们先来简单说一下布隆表达器的思想 既然 直接访问Redis 可能会存在Redis的穿透问题那么我们就设置一个容器这个容器里面记录了Redis中都有哪些数据而我们以后所有的对于Redis的数据操作都需要先在这个存储装置中查找我们想要操作的数据是否存在如果存在才可以进入Redis进行相关数据操作。 例如这个容器里面说明了Redis中有张三李四王五 这三个数据。那么如果我们要查询赵六这个数据按照以前的思想就是直接在Redis中查询赵六这个数据。但Redis中并不存在这就造成了Redis的穿透问题。而为了解决这个问题我们就使用这个容器我们先在这个容器中查询是否有赵六这个数据如果有再查询Redis如果没有就直接Return false就可以了。 相信通过这么说大家肯定已经理解了布隆过滤器的思想布隆过滤器就是一个记录Redis中存在哪些数据的容器 那么现在问题的核心已经变为我们如何高效的构建这个容器 因为容器的目的只是为了证明Redis中存在这个数据如果我们要通过存储这个元素的全部信息来证明Redis中存在这个数据那简直是太扯淡了。 相信大家自己可以想出很多简化存储数据形式的方法而我们直接来为大家介绍一下布隆过滤器是怎么构建自己的存储方式的 整个布隆过滤器我们可以认为是一个存储0和1的一维数组 而他是怎么通过这些0和1来说明一个元素是否存在于Redis中呢 布隆过滤器内部有自己的哈希算法可以对数据进行哈希映射将其映射为一个一维数组的下标那么我们就修改这个下标对应的值为1。当我们判断当前数据在Redis中是否存在的时候我们就使用相同的哈希算法再次得到一个下标值检查这个下标对应的位置是否为1。就可以快速判断当前数据是否在Redis中存在了。 例如我们的Redis中有张三这个数据我们把他存储到布隆过滤器中 此时如果我们输入一个数据是李四而Hash(李四)4我们一查询这个一维数组下标为4的位置数值为0这就说明了Redis中不存在李四这个数据那么我们就直接返回避免了Redis的穿透问题。 看到这里相信有善于思考的同学已经发现了问题万一两个数据经过Hash函数得到的下标值是一样的呢 假设Redis中存在数据AHash(A)3,而我们输入的数据B经过Hash算法之后也得到了下标3那么岂不是造成错误了 其实这种情况是存在的也就是说随之数据量的增加布隆过滤器是一定会出现错误判断的情况的。而为了减少这种错误我们的思维也很简单我多使用几个Hash函数不就好了 既然一次得到的下标会重复我就对一个数据进行多次Hash把得到的下标所对应的空间都标记为1。在判断数据的时候我们就进行同样的操作只有对应的下标空间都为1的时候才证明该数据在Redis中存在。 例如我们在布隆过滤器中记录张三这个数据的时候就多进行几次Hash把得到的下标空间都标记为1。在进行判断数据是否存在的时候就使用相同Hash函数进行相同次数的操作判断得到的下标的空间是否为1 也就是说布隆过滤器的误判率可以通过哈希函数的数量来进行调整。 而哈希函数越多所映射出来的下标值就越多下标值越多一维数组的长度就越长布隆过滤器的空间复杂度就越高。 基于Spring Boot实现布隆过滤器 我们不手动实现布隆过滤器而是直接使用Google Guava中提供的BloomFilter。 1.导入依赖 dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversionxxx/version /dependency 2.创建并配置布隆过滤器 import com.google.common.hash.BloomFilter; import com.google.common.hash.Funnels; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class BloomFilterConfig {Beanpublic BloomFilterString bloomFilter() {int expectedInsertions 1000; // 期望的插入数量double fpp 0.01; // 期望的误判率BloomFilterString bloomFilter BloomFilter.create(Funnels.unencodedCharsFunnel(), expectedInsertions, fpp);return bloomFilter;} } 3.使用布隆过滤器 import com.google.common.hash.BloomFilter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service public class MyService {Autowiredprivate BloomFilterString bloomFilter;public boolean isElementExists(String element) {return bloomFilter.mightContain(element);}public void addElement(String element) {bloomFilter.put(element);} } 在这里我们再贴一下我自己的一个练手项目的使用 跟上述的代码其实都差不多主要在Service层中多添加一个方法用于把Redis中的所有KEY 都放到布隆过滤器中然后要设置在启动之后自动执行这个注入 之后就可以在使用到Redis的方法中使用这个server层类 这样我们就在这个项目中实现了基于布隆过滤器来缓解Redis的穿透问题。 所以其实我们可以看到布隆过滤器的使用难点主要在于如何在真实业务海量数据的背景下。实现对布隆过滤器的初始化因为我们要直接从数据库中拿数据这种大规模的IO操作势必会给服务器来带很大的压力 而我由于能力限制想不出太多的方法也无法真实模拟海量数据背景所以在这方面有所欠缺。 而我能够想出的方法有: 1.创建定时任务分批存储数据到布隆过滤器中。 2.创建多个布隆切片分批处理数据。 不知道在实际业务开发中我们是怎么使用布隆过滤器的如果有知道的大佬还请赐教。 总结 布隆过滤器是一种高效的概率型数据结构用于快速判断一个元素是否可能存在于一个集合中。通过位数组和多个哈希函数的组合布隆过滤器可以实现高效的元素插入和查询操作并且占用较少的内存空间。 总的来说布隆过滤器具有以下几个关键优点 高效的插入和查询性能布隆过滤器的时间复杂度都是O(k)其中k为哈希函数的数量。这使得它能够在常数时间内快速地判断一个元素是否可能存在于集合中对于大规模数据集的重复查询非常有效。节省内存空间布隆过滤器只需要存储每个元素的哈希值对应的位数组位置信息而不需要存储元素本身。相比于其他数据结构它能够节省大量的内存空间尤其适用于处理大规模数据集。可调控的误判率通过调整哈希函数的数量和位数组的大小可以控制布隆过滤器的误判率。根据实际需求和应用场景可以选择合适的参数配置以达到平衡误判率和内存消耗的目标。 然而布隆过滤器也有一些缺点需要注意 存在一定的误判率由于哈希函数的计算结果有可能冲突布隆过滤器会出现一定程度的误判。这意味着在判断一个元素存在时可能会出现一定的虚警情况需要进行进一步的确认。无法删除元素由于布隆过滤器的位数组中的位只能置为1而不能置为0所以无法从布隆过滤器中删除已插入的元素。如果需要删除元素的功能布隆过滤器可能不适用。 综上所述布隆过滤器是一种高效、节省内存的数据结构通过牺牲一定的精确性来提高查询效率。它在多个领域应用广泛特别适用于大规模数据集的查询和去重场景。在使用布隆过滤器时需要根据实际需求选择合适的参数配置并注意误判率和删除元素的限制。 如果我的内容对你有帮助请点赞评论收藏。创作不易大家的支持就是我坚持下去的动力
http://www.zqtcl.cn/news/646060/

相关文章:

  • wordpress最快仿站酷炫个人特别网站
  • 公司建站详细步骤如何注册一家公司要多少钱
  • 网站推广网络营销山西大学物理电子工程学院研招网
  • 亚马逊做国际外贸在哪个网站毕业设计网站开发选题依据
  • 镇江网站排名优化费用app软件开发平台游戏
  • 襄阳网站建设xytzg南通网站建设top
  • 有没有做产品团购的网站2d动画制作软件
  • 成都网站排名生客seo杭州专业网站制作设计
  • 阿里云 企业 网站四平市网站建设
  • 政务门户网站建设信息奇人网站
  • 打开网站弹出广告代码如何建设网站方便后期维护
  • 海淀网站建设龙岩做网站用什么cms 知乎
  • 网站托管费用多少免费一卡二卡三
  • 长沙做网站品牌中信建设官网站首页
  • 网站空白页黑链聊城网站建设代理商
  • 微信上打开连接的网站怎么做在网上可以做宣传的有那些网站
  • 公司在选择网站时应考虑什么问题溧阳 招网站开发
  • 兴宁电子商务网站建设农村电子商务网站建设方案
  • 张北县网站建设网站设计师加油站
  • 网站建设车成本网站开发网络结构图
  • 建设部职称网站宝山网站制作
  • 太仓网站建设哪家好58同城找工作
  • 一键网站制作机关网站建设建议
  • 快站公众号工具台州网站制作系统分析怎么写
  • 品牌网站制作方案如何写推广软文
  • o2o营销seo薪酬如何
  • 网站开发公司 网站空间推广网站制作
  • 鞍山网站制作小程序WordPress网盘下载插件
  • 保山市建设厅官方网站郑州建设信息网站
  • clh网站建设公司h5网站源代码