这两天做东西,业务上有个特殊的需求,在用户访问页面的时候,针对某一行代码进行控制,按照概率来进行显示,我做的是针对当前页面的曝光进行处理,曝光代码是第三方的,页面上只要有这段代码就算是执行了这段曝光代码,所以才写了这个轮询的一个方法,这个方法可以根据自己的需求修改,下面我把这个方法全部帖出来:

CacheSlidingExpirationHour:时间,缓存时间2小时
CountdownCurrentIndexCacheName:缓存名称
log:日志

m_objCountdownCurrentIndexLock::当前对象

m_snIntervalSecond:定义一个数组,可以视为概率值
说明:0,1,1,1 数据中存了4个数,我们设为总的概率为100%,每个代表25%,所以现在我设置的是当前的概率为75% 存如缓存的是数据的索引,取的时候也取的索引,方法返回索引,转成int类型
 public class CountdownHelper
{
private const int CacheSlidingExpirationHour = ;
private const string CountdownCurrentIndexCacheName = "OnlineMeetingCountdownCurrentIndex";
private static IAppLog log = AppLoggerManager.GetLogger(typeof(CountdownHelper));
private static Cache m_cache = HttpContext.Current.Cache;
private static object m_objCountdownCurrentIndexLock = new object();
private static int[] m_snIntervalSecond = new int[] { , , , }; //1显示 0不显示 public CountdownHelper()
{
} public int GetCountdownAddedSecond()
{
lock (m_objCountdownCurrentIndexLock)
{
int nCountdownCurrentIndex = ; try
{
object objCountdownCurrentIndex = m_cache[CountdownCurrentIndexCacheName];
if (objCountdownCurrentIndex == null)
{
//如果需要加缓存的,就用下面的
//m_cache.Insert(CountdownCurrentIndexCacheName, 1, null, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(CacheSlidingExpirationHour), CacheItemPriority.NotRemovable, null);
//不用加缓存的用下面的
m_cache.Insert(CountdownCurrentIndexCacheName, , null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
}
else
{
nCountdownCurrentIndex = (int)objCountdownCurrentIndex; if (nCountdownCurrentIndex == m_snIntervalSecond.Length - )
{
m_cache[CountdownCurrentIndexCacheName] = ;
}
else
{
m_cache[CountdownCurrentIndexCacheName] = nCountdownCurrentIndex + ;
}
} return m_snIntervalSecond[nCountdownCurrentIndex];
}
catch (Exception __error)
{
//如果需要记录错误日志的,可以记录到这里,我这里没有加
//log.Error("功能介绍GetCountdownAddedSecond:" + __error.Message);
if (nCountdownCurrentIndex > m_snIntervalSecond.Length - )
{
nCountdownCurrentIndex = m_snIntervalSecond.Length - ;
}
return m_snIntervalSecond[nCountdownCurrentIndex];
}
}
} }

  这个功能的需求是:业务部门需要监控当前页面的曝光率,所以需要用概率去判断当前的曝光代码如何在页面上交替显示,起初是曝光率为50%,所以数组中直接就是new int[] { 0, 1},后来改成75%,就是上面的代码,所以这样既可以监控曝光,有可以控制曝光代码。

前台调用是用AJAX方式:

说明:等于1,将曝光代码添加到页面,否则不加

 <div id="adver"></div>
      <!--轮询曝光-->
$.post("/Topic/GetCountdownAddedSecond", function (data) {
if (data) {
if (data.num == 1) {
var img_html = "<img src=\"https://d_directed_treatment =?\ment\" style=\"display:none;\">";
$("#adver").html(img_html);
}
}
}, "json");

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://www.cnblogs.com/zhangpengnike/p/5546046.html (未经允许严禁用于商业用途!)

c#-轮询算法的更多相关文章

  1. loadbalance轮询算法 java实现

    /** * <html> * <body> * <P> Copyright JasonInternational</p> * <p> All ...

  2. SpringCloud-Ribbon负载均衡机制、手写轮询算法

    Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...

  3. 负载均衡算法: 简单轮询算法, 平滑加权轮询, 一致性hash算法, 随机轮询, 加权随机轮询, 最小活跃数算法(基于dubbo) java代码实现

    直接上干活 /** * @version 1.0.0 * @@menu <p> * @date 2020/11/17 16:28 */ public class LoadBlance { ...

  4. Java实现平滑加权轮询算法--降权和提权

    上一篇讲了普通轮询.加权轮询的两种实现方式,重点讲了平滑加权轮询算法,并在文末留下了悬念:节点出现分配失败时降低有效权重值:成功时提高有效权重值(但不能大于weight值). 本文在平滑加权轮询算法的 ...

  5. C# Nginx平滑加权轮询算法

    代码很简单,但算法很经典,话不多说,直接上代码. public struct ServerConfig { /// <summary> /// 初始权重 /// </summary& ...

  6. 负载均衡算法WeightedRoundRobin(加权轮询)简介及算法实现

    Nginx的负载均衡默认算法是加权轮询算法,本文简单介绍算法的逻辑,并给出算法的Java实现版本. 本文参考了Nginx的负载均衡 - 加权轮询 (Weighted Round Robin).     ...

  7. Java实现负载均衡算法--轮询和加权轮询

    1.普通轮询算法 轮询(Round Robin,RR)是依次将用户的访问请求,按循环顺序分配到web服务节点上,从1开始到最后一台服务器节点结束,然后再开始新一轮的循环.这种算法简单,但是没有考虑到每 ...

  8. 权重轮询调度算法(Weighted Round-Robin Scheduling)-C#实现

    在多台机器实现负载均衡的时候,存在调度分配的问题. 如果服务器的配置的处理能力都一致的话,平均轮询分配可以直接解决问题,然而有些时候机器的处理能力是不一致的. 假如有2台机器 A和B , A的处理能力 ...

  9. 负载均衡之DNS轮询

    大多数域名注册商都支持对统一主机添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡.下图的例子是:有3台联通服务器.3台电信服 ...

随机推荐

  1. MyBatis自动生成代码示例

    在项目中使用到mybatis时,都会选择自动生成实体类,Mapper,SqlMap这三个东东. 手头上在用的又不方便,找了下网上,其实有很多文章,但有些引用外部文件时不成功,也不方便,所以重新整理了下 ...

  2. JVM调优总结:调优方法

    JVM调优总结:调优方法 2012-01-10 14:35 和你在一起 和你在一起的博客 字号:T | T 下面文章将讲解JVM的调优工具以及如何去调优等等问题,还有一些异常问题的处理.详细请看下文. ...

  3. jquery $(document).ready() 与window.onload

  4. java 基础加强--书籍+题目+上机测试

    scjp test( 在线测试网站):http://scjptest.com/mock-test.xhtml <SCJP Sun® Certified Programmer for Java™ ...

  5. linux TCP: time wait bucket table overflow

    早上一台rabbitmq和Java所在的服务器,客户端反馈超级卡,看io和cpu都不高.发现六七万消息挤压,临时性问题解决之后,看/var/log/messages,发现很多TCP: time wai ...

  6. ubuntu15.10_x64 安装 nginx

      浏览器到 http://nginx.org/en/download.html 下载 stable version的nginx 如nginx-1.10.1.tar.gz,这是一个nginx源码包,需 ...

  7. Uploadify 上传插件引起Chrome崩溃解决方法

    将Uploadify初始化代码延时加载,可解决Chrome崩溃. setTimeout(initUploadify, 60); function initUploadify() { var $Uplo ...

  8. 【前端福利】用grunt搭建自动化的web前端开发环境-完整教程

    jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过 ...

  9. JavaScript实战-菜单特效

    以下是我自己用原生JS写的各种菜单特效,虽然网上一搜一大堆,但我还是喜欢自己来写一写! 这是上一篇:JavaScript实战(带收放动画效果的导航菜单) 下面是经过优化后的完整代码,优化了CSS样式. ...

  10. Nmap源码分析(脚本引擎)

    Nmap提供了强大的脚本引擎(NSE),以支持通过Lua编程来扩展Nmap的功能.目前脚本库已经包含300多个常用的Lua脚本,辅助完成Nmap的主机发现.端口扫描.服务侦测.操作系统侦测四个基本功能 ...