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

苍南建设网站网站建设与管理适合女生吗

苍南建设网站,网站建设与管理适合女生吗,有哪些网站是中国风网站,网络运维工程师是干什么的深入理解Redis缓存穿透、击穿、雪崩及解决方案 一、简介Redis 简介缓存作用与优化 二、缓存问题的分类缓存穿透缓存击穿缓存雪崩 三、缓存穿透的解决方案布隆过滤器缓存空对象接口层校验 四、缓存击穿的解决方案互斥锁热点数据提前加载 五、缓存雪崩的解决方案增加缓存容错能力… 深入理解Redis缓存穿透、击穿、雪崩及解决方案 一、简介Redis 简介缓存作用与优化 二、缓存问题的分类缓存穿透缓存击穿缓存雪崩 三、缓存穿透的解决方案布隆过滤器缓存空对象接口层校验 四、缓存击穿的解决方案互斥锁热点数据提前加载 五、缓存雪崩的解决方案增加缓存容错能力数据预热 六、Redis针对以上问题的解决方案多级缓存策略主从复制与持久化 一、简介 Redis 简介 Redis是一个基于内存的数据结构存储系统是一个支持键值对、发布/订阅、存储新闻资讯的高性能key-value存储数据库。 缓存作用与优化 缓存技术在Web开发中是比较重要的组成部分常用于增强Web应用的性能和容错性。缓存通过将计算过的数据或提前读出数据放置在高速缓存中当请求相同数据时直接从缓存中响应。因此缓存对于加速应用响应时间、节省处理器资源等方面有着非常显著的作用。 为了更好的利用缓存需要对缓存问题进行分类和解决方案。 二、缓存问题的分类 缓存穿透 缓存穿透是指查询一个不存在的数据由于缓存没有数据请求被透传到数据库此时如果恶意用户不断发起不存在数据的查询缓存就无法发挥效果请求最终压垮数据库。这种情况需要对不存在数据加以处理如使用Nginx缓存、使用异常机制处理。 缓存击穿 缓存击穿是指对于一个存在的key由于并发量大同时失效导致多个线程都去查询数据库造成缓存击穿。为了避免此类情况可以令所有线程等待第一个查询后再进行操作或者使用互斥锁等机制限制并发访问。 缓存雪崩 缓存雪崩是指缓存中大量的key在同一时刻失效导致瞬间有大量的请求直接访问数据库严重影响数据库的性能和应用的稳定性。为了解决这个问题可以引入缓存预热、设置不同的过期时间等措施。 三、缓存穿透的解决方案 布隆过滤器 布隆过滤器可以快速判断一个元素是否存在于一个集合中因此可以用来验证请求的参数或者ID在数据库中是否存在从而有效防止恶意攻击导致的缓存穿透。 import redis from bitarray import bitarrayclass BloomFilter:def __init__(self, capacity, error_rate):self.capacity capacityself.error_rate error_rateself.redis_client redis.Redis()self.hash_count int(-1 * (capacity * math.log(error_rate) / (math.log(2) ** 2)))self.bit_array_length int(math.ceil((capacity * math.log(error_rate)) / math.log(1.0 / (2 ** math.log(2)))))self.redis_client.setbit(bloom_filter, self.bit_array_length, 0)def exists(self, key):for i in range(self.hash_count):hashed_index hash(key str(i)) % self.bit_array_lengthif not self.redis_client.getbit(bloom_filter, hashed_index):return Falsereturn Truedef add(self, key):for i in range(self.hash_count):hashed_index hash(key str(i)) % self.bit_array_lengthself.redis_client.setbit(bloom_filter, hashed_index, 1)缓存空对象 当查询结果为空时我们也可以将其缓存到Redis中并给它一个较短的生命周期。这样下次如果同样的查询请求再次到达时就可以直接从缓存中返回空结果而不会穿透到数据库。 def get_user_info(user_id):user_key fuser:{user_id}user_info redis.get(user_key)if not user_info:# 从数据库中查询用户信息如果查不到标记为空并将结果缓存到Redis中user_info db.query_user_info(user_id)if not user_info:redis.set(user_key, , ex60)else:redis.set(user_key, user_info, ex3600)return user_info接口层校验 在应用层或者接口层增加验证机制对于非法请求进行拦截。可以根据请求的参数特征、请求频率等信息进行识别从而避免类似SQL注入攻击等请求穿透缓存。 四、缓存击穿的解决方案 互斥锁 在需要大量更新缓存的场景下我们通常需要使用互斥锁来避免缓存击穿。比如可以使用Redis的SETNX命令设置标记当发现缓存过期时先去获取锁然后再去加载数据并更新缓存同时释放该锁。 def get_user_info(user_id):user_key fuser:{user_id}user_info redis.get(user_key)if not user_info:lock_key f{user_id}_lock# 使用SETNX命令尝试获取锁如果获取成功if redis.setnx(lock_key, 1):# 设置锁的超时时间避免死锁redis.expire(lock_key, 60)user_info db.query_user_info(user_id)redis.set(user_key, user_info, ex3600)# 解锁删除锁标记redis.delete(lock_key)return user_info热点数据提前加载 在缓存过期前提前加载数据避免并发请求穿透直接访问数据库导致缓存击穿。可以设置缓存过期时间略长于预加载时间保证数据一定能够预先加载到缓存中。 def preload_hot_data():hot_data_key hot_datahot_data db.query_hot_data()redis.set(hot_data_key, hot_data, ex600)def get_hot_data():hot_data_key hot_datahot_data redis.get(hot_data_key)if not hot_data:# 预加载热点数据到缓存preload_hot_data()hot_data redis.get(hot_data_key)return hot_data五、缓存雪崩的解决方案 增加缓存容错能力 当大量缓存同时失效时可以通过应用多级缓存、加入容错机制等手段防止缓存雪崩。具体实现可以根据业务场景进行选择和调整。 数据预热 尽可能在业务低峰期前将缓存数据全部加载到缓存系统中从而避免业务高峰期缓存穿透、缓存击穿导致的缓存雪崩。可以使用定时任务或者异步加载方式将慢查询或热点数据提前加载到缓存中。 def preload_cache():user_keys db.query_all_user_keys()for user_key in user_keys:user_info db.query_user_info(user_key)redis.set(user_key, user_info, ex3600)# 定时任务每天凌晨1点执行一次数据预热 scheduler.add_job(preload_cache, cron, hour1)六、Redis针对以上问题的解决方案 Redis是一款高性能的内存数据库为了解决以上问题它提出了以下两种解决方案 多级缓存策略 缓存中间件作为缓存系统的一种主要用来提高网站并发量、降低网站响应时间、减轻源站数据库的压力等。多级缓存指的是使用两种及以上的缓存技术来加速响应速度。 多级缓存策略示例 1.使用 Redis 作为一级缓存存储频繁访问的热数据 2.使用 Memcached 作为二级缓存存储冷数据或者业务数据 3.使用本地缓存作为三级缓存存储session减少请求量。import redis import memcacheclass Cache:def __init__(self):self.redis redis.Redis(hostlocalhost, port6379)self.memcache memcache.Client([127.0.0.1:11211])def get(self, key):# 尝试从 Redis 中获取数据data self.redis.get(key)if not data:# Redis 中没有该数据尝试从 Memcached 中获取data self.memcache.get(key)if not data:# Memcached 中也没有则从本地缓存中获取data self.local_cache.get(key)return datadef set(self, key, data):# 三个缓存都存储数据self.redis.set(key, data)self.memcache.set(key, data)self.local_cache.set(key, data)主从复制与持久化 为了提高 Redis 的稳定性和可靠性Redis 提供了主从复制和持久化机制。主从复制指的是数据备份将 Redis 数据库的数据复制到一台或多台 Redis 实例上以实现读写分离及容灾恢复持久化指的是通过 RDB 和 AOF 两种方式把内存中的数据保存到磁盘中保证数据在 Redis 重启后依旧存在。 主从复制示例 1.创建一个 Redis 实例将其设置为主服务器 2.创建两个 Redis 实例将其分别设置为从服务器 3.从主服务器同步数据到两个从服务器。 import redis# 创建 Redis 实例作为主服务器 redis_master redis.Redis(host192.168.1.100, port6379)# 创建两个 Redis 实例作为从服务器 redis_slave1 redis.Redis(host192.168.1.101, port6379) redis_slave2 redis.Redis(host192.168.1.102, port6379)# 将从服务器连接到主服务器上实现主从复制 redis_slave1.slaveof(redis_master.host, redis_master.port) redis_slave2.slaveof(redis_master.host, redis_master.port)# 可以通过以下命令查看主从状态 # redis-cli info replication
http://www.hkea.cn/news/14487684/

相关文章:

  • 门户网站建设 突出服务wordpress猜你喜欢功能
  • 简约网站后台推广下载app
  • 网站内容注意事项湖北神润建设工程网站
  • 丰台网站建设是什么wordpress主题软件
  • 最好的网站开发语言服装设计官网
  • 便宜建站个人域名网站可以做企业站吗
  • 平面广告设计网站南山做网站公司哪家值得合作
  • 高级服装定制网站图标设计免费logo
  • 手机网站 域名wordpress更新服务器
  • 深圳专门网站建设百度账号登录入口
  • 网站改版设计要多久如何做好网络营销
  • 网站和系统的区别临淄哪里做网站
  • 阿里网站seo本地wordpress后台很慢
  • 惠州企业网站建设选哪家怎么建设国外网站
  • 廊坊网络公司网站移动互联网站开发与维护
  • 做网站建设哪家便宜seo诊断服务
  • angularjs 网站模板商城网站验收标准
  • 二次网站开发平台大悟网站制作
  • 360怎么免费建网站大连线上教学
  • wordpress编辑器下载沧州网站优化
  • 深圳网站建设 龙华信科咨询超级seo外链工具
  • 做网站网站代理没有盈利违法吗电子商务网站建设设计方案
  • 合工大网站建设试卷dw建设手机网站
  • 自己怎么做网站模块灰色系网站
  • 农业网站建设方案 ppt模板下载linux wordpress 中文
  • 网站开发支付功能想在网站上放百度广告怎么做
  • 微信 host 微网站模版内容营销方案
  • 网站设计大概价格平台网站建设费用
  • 网页qq网址提升seo排名的方法
  • 电商网站做门户网站的好处