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

织梦手机网站源码下载中国最早的电商平台

织梦手机网站源码下载,中国最早的电商平台,木疙瘩h5制作,wordpress 数据库优化文章目录 过期删除策略和内存淘汰策略内存淘汰策略evictionPoolEntryevictionPoolPopulate Reservoir SamplingdictGetRandomKeydictGetSomeKeysReservoir Samplingchatgpt对Reservoir Sampling的介绍 过期删除策略和内存淘汰策略 详细介绍请参考博客“redis过期删除策略和内存… 文章目录 过期删除策略和内存淘汰策略内存淘汰策略evictionPoolEntryevictionPoolPopulate Reservoir SamplingdictGetRandomKeydictGetSomeKeysReservoir Samplingchatgpt对Reservoir Sampling的介绍 过期删除策略和内存淘汰策略 详细介绍请参考博客“redis过期删除策略和内存淘汰策略” 内存淘汰策略 为了节省内存redis并没有采用传统的方法实现LRU和LFU而是基于随机采样的方式近似实现LRU和LFU并引入淘汰池进行优化。接下来详细看看是如何淘汰池进行优化的。具体实现在evict.c文件中的函数evictionPoolPopulate。 /* This is a helper function for performEvictions(), it is used in order* to populate the evictionPool with a few entries every time we want to* expire a key. Keys with idle time bigger than one of the current* keys are added. Keys are always added if there are free entries.** We insert keys on place in ascending order, so keys with the smaller* idle time are on the left, and keys with the higher idle time on the* right. */这个函数是performEvictions()的辅助函数。每当想要过期一些key时该函数被用来向淘汰池填充一些数据。当淘汰池未满时keys总是被添加反之的话添加具有更大idle time的keys。淘汰池按照idle time升序排序即较小idle time的key存储在淘汰池的左边较大idle time的key存储在淘汰池的右边。/* When an LFU policy is used instead, a reverse frequency indication is used* instead of the idle time, so that we still evict by larger value (larger* inverse frequency means to evict keys with the least frequent accesses).*/当使用LFU策略时用反向频率reverse frequency代替idle time。按照reverse frequency升序排序较大的inverse frequency意味着keys具有较小的lfu值即least frequent accesses。evictionPoolEntry evictionPoolPopulate Reservoir Sampling count dictGetSomeKeys(sampledict,samples,server.maxmemory_samples);接下来看一下随机采样的逻辑。 dictGetRandomKey 首先看一下随即采取一个dictEntry的逻辑 /* Return a random entry from the hash table. Useful to* implement randomized algorithms */ 从hash table中返回一个随机entry。用来实现随机算法。从代码中可以看出在进行随机采样一个dictEntry时会判断dict当前是否处于rehashing阶段如果是的话就进行迁移操作 在redis7.2.2|Dict这篇文章中已经介绍过dict何时会发生rehashing dictGetSomeKeys 接下来看一下随机采取多个dictEntry的逻辑。 /* This function samples the dictionary to return a few keys from random* locations.** It does not guarantee to return all the keys specified in count, nor* it does guarantee to return non-duplicated elements, however it will make* some effort to do both things.** Returned pointers to hash table entries are stored into des that* points to an array of dictEntry pointers. The array must have room for* at least count elements, that is the argument we pass to the function* to tell how many random elements we need.** The function returns the number of items stored into des, that may* be less than count if the hash table has less than count elements* inside, or if not enough elements were found in a reasonable amount of* steps.** Note that this function is not suitable when you need a good distribution* of the returned items, but only when you need to sample a given number* of continuous elements to run some kind of algorithm or to produce* statistics. However the function is much faster than dictGetRandomKey()* at producing N elements. */ 这个函数对字典进行采样从随机位置返回几个键。 它不保证返回count中指定的所有键也不保证返回不重复的元素但是它会努力做到这两件事。 返回的指向哈希表项的指针存储在指向dictEntry指针数组的des中。 数组必须至少有容纳count元素的空间这是我们传递给函数的参数用于告诉我们需要多少个随机元素。 该函数返回存储在des中的项数如果哈希表中包含的元素少于count或者在合理的步骤中没有找到足够的元素则可能小于count。 请注意当您需要返回项的良好分布时此函数不适用而只适用于需要“抽样”给定数量的连续元素以运行某种算法或生成统计数据时。 然而在生成N个元素时该函数比dictGetRandomKey()快得多。在生成N个元素时该函数比dictGetRandomKey()快得多。 从代码中可以看出在进行随机采样一个dictEntry时会判断dict当前是否处于rehashing阶段如果是的话就进行迁移操作 在redis7.2.2|Dict这篇文章中已经介绍过dict何时会发生rehashing 通过研究代码发现在生成N个元素时函数dictGetSomeKeys确实要比函数dictGetRandomKey快得多。因为对于dictGetSomeKeys函数来说只需要确定一个bucket然后沿着list取样即可。但是对于dictGetRandomKey函数每生成一个元素都需要随机找到一个bucket并且还需要计算list的长度并且找到其中一个随机位置。 Reservoir Sampling /* Collect all the elements of the buckets found non empty while iterating * To avoid the issue of being unable to sample the end of a long chain, * we utilize the Reservoir Sampling algorithm to optimize the sampling process. * This means that even when the maximum number of samples has been reached, * we continue sampling until we reach the end of the chain. * See https://en.wikipedia.org/wiki/Reservoir_sampling. */ 为了避免在长链末端无法采样的问题我们采用了Reservoir Sampling算法来优化采样过程。 这意味着即使达到了最大样本数我们也会继续采样直到到达链的末端。有关“Reservior Sampling”的详细介绍见https://en.wikipedia.org/wiki/Reservoir_sampling。 chatgpt对Reservoir Sampling的介绍 水库采样法Reservoir Sampling是一种在处理大规模数据流或未知大小的数据集合时用于从中随机抽取固定数量样本的算法。它特别适用于数据流场景因为在数据流开始之前并不知道其总量。 核心思想 水库采样的核心思想是在处理一个可能无限大的数据流时从中抽取固定数量的样本使得每个数据元素被选中的概率是相同的。 操作步骤 假设我们要从数据流中随机抽取k个元素具体步骤如下 初始化创建一个大小为k的“水库”数组并将前k个元素直接存入水库。替换阶段 对于每一个新的元素假设这是第n个元素生成一个随机数r该随机数的范围是[0, n-1]。如果r的值小于k则用这个新元素替换水库中的第r个元素。如果r的值大于等于k则忽略这个元素。 举例说明 假设你有一个数据流其中包含1000个元素你想从中随机抽取10个样本。你会按以下步骤进行 将前10个元素直接放入水库。对第11个元素生成一个随机数r范围是[0, 10]。如果r的值在0到9之间则用第11个元素替换水库中对应位置的元素。如果r等于10则忽略这个元素。重复上述步骤直到处理完所有的1000个元素。 优势 空间效率高只需要存储k个元素的水库不论数据流的大小如何这使得水库采样在内存限制的环境中特别有用。公平性保证了在最终的k个样本中数据流中的每个元素被选中的概率是相同的。 应用场景 在线广告系统随机抽取用户的行为数据用于后续分析。流媒体处理在数据流不断到来的情况下实时生成随机样本。 水库采样是一种简单而有效的算法特别适用于在处理大规模数据时确保样本具有代表性。
http://www.dnsts.com.cn/news/198195.html

相关文章:

  • 环保部网站官网建设项目审批哪家装修公司口碑好?
  • wordpress百度站长主动推送做网站为什么很复杂
  • 济南建站网站建设模式
  • 佛山专业网站设计方案网页配色的技巧是什么
  • 银川网站开发网页设计html代码大全唐代诗人
  • 外贸营销网站建设公司网站开通
  • 金融做推广的网站如何在网上推广游戏
  • 网站前端建设需要学会什么意思百度浏览器广告怎么投放
  • 网站建设英文字体格式学网站建设能赚钱吗
  • 织梦网站调整做服装广告素材网站有哪些
  • 怎么建设网站是什么android属于系统软件吗
  • 做网站用什么浏览器aso推广
  • 搭建网站教学wordpress 概要
  • 网址查询地址查询站长之家做电商网站企业
  • 四会城乡建设局网站谈谈网站建设的主要内容
  • 天津网站优化步骤网页设计与网站开发期末
  • wordpress企业网站实例最新国际形势分析
  • 优秀网站ui设计建筑工程完工后移交情况说明
  • 廊坊网站关键词排名湖北专升本网站建设
  • 做兼职上什么网站找专业北京网站建设
  • 长春网络建站模板企业网站制作一般多少钱
  • 网站建设玖金手指排名14重庆网站建设公司海口
  • seo公司网站建设上海关键词优化公司哪家好
  • 北京轨道交通建设管理有限公司网站网站放自己服务器备案
  • 营销型网站建设原则衡阳百度seo
  • 辽宁省建设银行e护航网站网站建设的技能有哪些内容
  • 商务信息网站怎么做网站开发怎么拉客户
  • 宝安电子厂做高端网站做网站的版权问题
  • 直播网站建设需要什么软件有哪些大学生html网页设计作业
  • 做网站建设的合同网站设计培训费用是多少