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

香山红叶建设有限公司网站商品标题关键词优化

香山红叶建设有限公司网站,商品标题关键词优化,北京公司公示在哪个网站,网站建设字体颜色代码为什么要使用缓存 性能 我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 并发 在大并发的情况下,所有的请求直接访问数…

为什么要使用缓存

  1. 性能

我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应

  1. 并发

在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。

优秀的缓存系统Redis

Redis是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器

Redis相比同类的其他产品,具有如下优点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
  • Redis支持数据的备份,即master-slave模式的数据备份

redis为什么这么快

主要是以下三点

  • 纯内存操作
  • 单线程操作,避免了频繁的上下文切换
  • 采用了非阻塞I/O多路复用机制

redis 的过期策略以及内存淘汰机制

分析:这个问题其实相当重要,到底redis有没用到家,这个问题就可以看出来。比如你redis只能存5G数据,可是你写了10G,那会删5G的数据。怎么删的,这个问题思考过么?还有,你的数据已经设置了过期时间,但是时间到了,内存占用率还是比较高,有思考过原因么?

回答:

redis采用的是定期删除+惰性删除策略。

为什么不用定时删除策略?

定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略.

定期删除+惰性删除是如何工作的呢?

定期删除,redis默认每个100ms检查,是否有过期的key,有过期key则删除。需要说明的是,redis不是每个100ms将所有的key检查一次,而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis岂不是卡死)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。

于是,惰性删除派上用场。也就是说在你获取某个key的时候,redis会检查一下,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除。

采用定期删除+惰性删除就没其他问题了么?

不是的,如果定期删除没抽查到过期的 key 去删除。然后你也没即时去请求key,也就是说惰性删除也没生效。这样,redis的内存会越来越高。那么就应该采用内存淘汰机制

在redis.conf中有一行配置

# maxmemory-policy volatile-lru

该配置就是配内存淘汰策略的

  1. noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。应该没人用吧。

  2. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。推荐使用,目前项目在用这种。

  3. allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。应该也没人用吧,你不删最少使用Key,去随机删。

  4. volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般是把redis既当缓存,又做持久化存储的时候才用。不推荐

  5. volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。依然不推荐

  6. volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。不推荐
    ps:如果没有设置 expire 的key, 不满足先决条件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。

渐进式 Rehash

渐进式 Rehash 的原因

整个rehash过程并不是一步完成的,而是分多次、渐进式的完成。如果哈希表中保存着数量巨大的键值对时,若一次进行rehash,很有可能会导致服务器宕机。

渐进式 Rehash 的步骤

  1. 为ht[1]分配空间,让dict字典同时持有 ht[0] 和 ht[1] 两个哈希表。
  2. 在字典中维持一个索引计数器变量rehashidx,并将它的值设置为0,表示rehash工作正式开始。
  3. 在rehash进行期间,每次对字典执行添加、删除、查找或者更新操作时,程序除了执行指定的操作以外,还会顺带将ht[0]哈希表在 rehashidx索引(table[rehashidx]桶上的链表)上的所有键值对rehash到ht[1]上,当rehash工作完成之后,将rehashidx属性的值增一,表示下一次要迁移链表所在桶的位置。
  4. 随着字典操作的不断执行,最终在某个时间点上,ht[0]的所有桶对应的键值对都会被rehash至ht[1],这时程序将rehashidx属性的值设为-1,表示rehash操作已完成。

渐进式 rehash 的好处在于它采取分而治之的方式, 将 rehash 键值对所需的计算工作均滩到对字典的每个添加、删除、查找和更新操作上, 从而避免了集中式 rehash 而带来的庞大计算量。

Redis 常见问题

缓存穿透

概念访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。

解决方案

  • 采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
  • 访问key未在DB查询到值,也将空值写进缓存,但可以设置较短过期时间。

缓存雪崩

大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。

解决方案

  • 可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效;
  • 采用限流算法,限制流量;
  • 采用分布式锁,加锁访问。
http://www.dtcms.com/wzjs/76914.html

相关文章:

  • 腾讯低代码开发平台百度竞价seo排名
  • h5可以做网站么google app
  • 建设企业网站的需要多长时间外链相册
  • 网站定制设计方案营销推广方案模板
  • 转塘有做网站的吗5118站长网站
  • 怎么查网站死链app推广注册接单平台
  • 青岛谁做网站多少钱最新seo自动优化软件
  • 做展览的网站aso优化公司
  • 江西正东建设工程有限公司网站外贸推广网站
  • 汽车租赁企业网站源码百度灰色关键词代做
  • 哪些做任务的网站靠谱谷歌广告联盟怎么做
  • 网站备案是什么一回事seo关键词优化排名推广
  • 广东公司网站建设哪家好深圳网站开发技术
  • 施工企业资质承包范围搜索引擎营销seo
  • 网站更换空间注意百度关键字排名软件
  • 企业培训 电子商务网站建设 图片什么是友情链接?
  • 兰州新晨诚网络科技有限公司线下课程seo
  • 福州网站营销班级优化大师官方免费下载
  • 网站管理和建设工作职责百度导航怎么下载
  • 本地wordpress站点上传文件百度小程序排名优化
  • 网站开发中遇到的技术问题网站seo在线诊断分析
  • 网站建设要多少钱怎样seo短视频网页入口引流下载
  • 广元市住房与城乡建设厅网站云计算培训
  • 网站源代码 phpweb个人网站设计代码
  • 服务好的南昌网站制作关键词搜索排名软件
  • 石家庄是几线城市seo优化交流
  • wordpress百度云网盘沈阳seo代理计费
  • 好用的网站管理系统免费培训机构管理系统
  • 游戏推广员怎么做seo优化员
  • 工程预算软件企业网站优化服务公司