存档

‘挨踢’ 分类的存档

推荐一本关于Nginx的书

2011年1月9日 wenhui 没有评论

作者是:Kevin(kevin.zwf#gmail.com) & Mark(kissingwolf@gmail.com)
地址:http://wenku.baidu.com/view/e9763a23482fb4daa58d4b29.html

有比较详细的介绍,以及实例~

分类: nginx, 挨踢 标签:

ie下用location.href切换页面后获取不到来源页HTTP_REFERER的解决方法

2010年12月26日 wenhui 没有评论

ie问题多多,大家懂得

解决方法为,用js生成一个链接,然后触发这个链接的点击事件
下面代码中的参数 “u” 即为需要跳转的url

function go(u){
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
        var referLink = document.createElement('a');
        referLink.href = u;
        document.body.appendChild(referLink);
        referLink.click();
    } else {
        location.href = u;
    }
}
分类: 脚本 标签:

[原创]redis将slave server转换为master server

2010年12月23日 wenhui 没有评论

假设当前有一台master server(配置较低)和一台slave server(配置较高),当你需要垂直扩容将原有的硬件配置较低的master server替换掉,而且要求不能停止服务.
可以这样干,在slave server上执行”SLAVEOF NO ONE”,将slave server转换为master server.
再将master server停掉,用一台配置较高的新server作为新的slave server~

分类: redis, 挨踢 标签:

玩转四方页面阴影效果的jQuery实现(暂未插件化)

2010年12月22日 wenhui 没有评论

http://sifang.com

它用图片实现的,我ps+css烂,还是jquery简单些,有问题给我留言哦 :-)

    var BGSC = 4; //阴影的宽度 这里是4个px
    for(var BGSi=1;BGSi<BGSC;BGSi++){
        if(!$('.BGShadow'+BGSi).length){
            $('.wrapper').append('<div class="BGShadow'+BGSi+'"></div>');
             //这里的.wrapper是需要添加阴影的对象~
        }
        $('.BGShadow'+BGSi).css({position:'absolute',left:$('.wrapper').offset().left-BGSi
                ,top:$('.wrapper').offset().top-BGSi,width:$('.wrapper').width()+BGSi*2+'px'
                ,height:$('.wrapper').height()+BGSi*2+'px',zIndex:-BGSi
                ,backgroundColor:'#555',opacity:'0.08'});
    }
分类: jQuery, 脚本 标签:

[转]对redis sort 实现的排行的压力测试(与mysql对比)

2010年12月20日 wenhui 没有评论

文章来源:http://hi.baidu.com/icej/blog/item/86f9a77e4c2eda320dd7dac7.html

补充一句:Redis在Nginx上还有module支持

http://people.freebsd.org/~osa/ngx_http_redis-0.2.0.tar.gz

Redis官方压力测试数据http://code.google.com/p/redis/wiki/Benchmarks
由于我计划应用到排行榜功能是,功能需求:根据指定uid找出该用户的所有好友积分,并根据积分输出该用户和好友积分的排行榜,及该用户在排行榜中的位置
一般的Mysql设计方式
user表
uid
name
sort 积分
好友关系flist表
uid 用户
fuid 好友

用户加积分的时候需要update user set sort=100 where uid=1
需要获得排行榜的时候需要先获得select uid from flist where uid=1,获得好友关系,在组合成uid列表执行
select name,sort from test_user where uid in(uid1,uid2,uid3) order by sort desc获得排行榜

使用Redis操作这个事就简单了。
每次有新用户玩游戏先注册用户信息 set uid:1 {“uid”:1,”name”:tom}
每次游戏积分更新就操作set uid:sort:1 100
设置好友关系时操作 sadd uid:flist:1 uid2
sadd uid:flist:1 uid3
获得某个用户好友排行榜sort uid:flist:1 by uid:sort:* get uid:*
如果需要将自己的用户数据也做排行榜,则需要在好友关系中要加入自己的uid: sadd uid:flist:1 uid1

我对Mysql和Redis基于这个场景应用做了压力测试
测试并发时的性能.测试方法,5个前端机各启动一定数量PHP进程连接目标服务器执行测试项目,产生并发效果:
Redis 1000个并发持续向Redis增加100W用户数据平均每次set耗时0.12 s。条数据长度30-40字符。

1000个并发对100W用户,每个用户拥有100个好友,共计10KW的数据,根据uid排序好友积分平均0.07s

由于Redis基本都是内存操作,在配置时有设置操作多少次后flush到本地,压力测试cpu load average都非常低,内存占用都是存储使用,基本这个机器跑Redis很闲..

同样业务场合100W用户,累计好友关系数据量500W,根据uid排序好友积分平均:0.2s。

差了一个0。1000个并发持续操作Mysql….cpu狂高…IO也增长,load average也高…三高…

我使用的Redis php api是php实现的,php module的执行一会就会提示连接异常,还没了解是什么问题。
php-redis的redis.php 需要自行增加个方法,发送sort命令,redis.php里没有增加sort操作,也没有disconnect方法..需要实战的话建议自行先加上了。
public function get_sort($key)
{
$response = $this->execute_command( “SORT {$key}” );
$count = (int)substr($response, 1);
$list = array();
for ( $i = 0; $i get_response(), 1);
$value = $this->get_response();
$list[] = $this->unpack_value($value);
}
return $list;
}

分类: redis, 挨踢 标签: , , ,

[转]用redis sort操作实现排行榜

2010年12月20日 wenhui 没有评论

文章来源:http://hi.baidu.com/icej/blog/item/b1286a1ed5d8a4fe1ad576d3.html

http://code.google.com/p/redis/

redis相传性能不错,不仅结合了key value数据库的优点,又有满足一些必要的关系型数据库的功能。
我们有个产品最近想为每个用户出排行榜,APP,SNS产品常见功能,每个用户与好友做排行榜排序……无聊又必备功能。

还没测试redis性能。但功能是可以实现的。还挺不错的….稍后会测试测试性能,和PHP的API 要是不错….那可真是神物啊。

做个示例:

[root@xpdmediainc04 redis-1.02]# ./redis-cli sadd tom:friend:list 123 #tom的好友列表 里面是好友的uid
1
[root@xpdmediainc04 redis-1.02]# ./redis-cli sadd tom:friend:list 456
1
[root@xpdmediainc04 redis-1.02]# ./redis-cli sadd tom:friend:list 789
1
[root@xpdmediainc04 redis-1.02]# ./redis-cli sadd tom:friend:list 101
1
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:sort:123 1000 #uid对应的成绩
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:sort:456 6000
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:sort:789 100
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:sort:101 5999
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:123 “{‘uid’:123,’name’:'lucy’}” #增加uid对应好友信息
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:456 “{‘uid’:456,’name’:'jack’}”
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:789 “{‘uid’:789,’name’:'marry’}”
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli set uid:101 “{‘uid’:101,’name’:'icej’}”
OK
[root@xpdmediainc04 redis-1.02]# ./redis-cli sort tom:friend:list by uid:sort:* get uid:* #从好友列表中获得id与uid:sort字段匹配后排序,并根据排序后的顺序,用key在uid表获得信息
1. {‘uid’:789,’name’:'marry’}
2. {‘uid’:123,’name’:'lucy’}
3. {‘uid’:101,’name’:'icej’}
4. {‘uid’:456,’name’:'jack’}
[root@xpdmediainc04 redis-1.02]# ./redis-cli sort tom:friend:list by uid:sort:* get uid:* get uid:sort:*
1. {‘uid’:789,’name’:'marry’}
2. 100
3. {‘uid’:123,’name’:'lucy’}
4. 1000
5. {‘uid’:101,’name’:'icej’}
6. 5999
7. {‘uid’:456,’name’:'jack’}
8. 6000

分类: redis, 挨踢 标签:

PHP中$_SERVER的详细用法

2010年12月4日 wenhui 没有评论

$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关。
$_SERVER['argv'] #传递给该脚本的参数。
$_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。
$_SERVER['SERVER_SOFTWARE'] #服务器标识的字串,在响应请求时的头部中给出。
$_SERVER['SERVER_PROTOCOL'] #请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER['QUERY_STRING'] #查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER['HTTP_ACCEPT'] #当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER['HTTP_ACCEPT_ENCODING'] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER['HTTP_CONNECTION'] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #当前请求的 User_Agent: 头部的内容。
$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名。
$_SERVER['REMOTE_PORT'] #用户连接到服务器时所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”。
$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。

分类: PHP, 脚本 标签:

一个类似在ECUG Con 2010大会上大屏幕的东西,其实只能做聊天

2010年10月18日 wenhui 没有评论

参考效果:http://ecug.ncu.me/
readme.txt在压缩包里面
代码下载:
http://ecug.ncu.me/chat.zip

分类: 开发, 项目 标签:

一个类似mac os x的图片相册预览效果的jQuery实现

2010年10月18日 wenhui 没有评论

版本暂定为0.1吧
参考效果:http://ecug.ncu.me/test/op/photo.php

    jQuery.extend({macosphotoview:function(element,images,speed,width,height,preloadcount){
        var i=0;
        var j=0;
        $(element).html("<img id='imageholder' width='"+(width==null?"240":width)+"' style='height:"+(height==null?"240":height)+"px;' src='"+images[0]+"' />").mouseover(function(){
            $(this).attr('accesskey','1');
            for(var xi=0;xi<images.length;xi++){
                imagestopreload += "<img src='"+images[xi]+"' />";
            }
            $('#macosphotoview_preload').append(imagestopreload);
        }).mouseout(function(){
            $(this).attr('accesskey','0');
        }).mousemove(function(){
            if(i>images.length-1){
                i=-1;
            }
            if($(this).attr('accesskey')=='1'){
                j++;
                if(speed==null){
                    speed=8;
                }
                if(j>speed){
                    i++;
                    if(images[i]!='') $(this).children().attr('src',images[i]);
                    j=0;
                }
            }
        });
        if(!$("#macosphotoview_preload").length){
            $('body').append("<div style='display:none' id='macosphotoview_preload'></div>");
        }
        var imagestopreload="";
        if(preloadcount==null){
            preloadcount=4;
        }
        preloadcount = preloadcount>images.length?images.length:preloadcount;
        for(var xi=0;xi<preloadcount;xi++){
            imagestopreload += "<img src='"+images[xi]+"' />";
        }
        $('#macosphotoview_preload').append(imagestopreload);
    }});

用法及参数介绍:

    $(document).ready(function(){
         $.macosphotoview('#imagecontainer',currentimages);
         $.macosphotoview('#imagecontainer1',currentimages,4);
         $.macosphotoview('#imagecontainer2',currentimages,12);
         $.macosphotoview('#imagecontainer3',currentimages,8,480,320);
         $.macosphotoview('#imagecontainer4',currentimages,8,480,320,10);
    });
//参数1为element的id啊class什么的,第二个参数为图片数组,第三个参数为图片切换速度(值越大越慢),第四第五个参数为图片的宽和高,第六个参数为预加载的图片数量
});
分类: jQuery, 脚本 标签:

小公司的6个管理天条 — 来自拉卡拉孙陶然

2010年10月13日 wenhui 没有评论

来源:http://t.sina.com.cn/suntaoran

1、由点及面式定战略,执行战略不撞南墙不回头。不制定大而全的N年规划,集中全部资源围绕市场突破点展开经营,最大限度突破该点并最大限度向四周扩大战果,此即为战略。战略一旦确定,开始执行后要坚决,不要因为些许挫折或者发现路上的美景就变化,按既定方针办直至不能办。

2、跟我冲而不是给我上。不设只管人不管事的领导,总裁应该直接兼任前敌总指挥,副总必须兼任下属关键部门的经理。虽说群众的创造力是无穷的,但是小公司不能指望领导不会下属会的奇迹。

3、只做最低限度的规范化管理,以奖惩分明作为管理核心。我们都喜欢规范和有序,但是只有公司越大规范的价值才越大,对于小公司,花精力去关注管理的规范直接后果就是效率的降低和成本的快速提高。小公司,只要目标明确奖惩分明就够了,对业务也只该做最低限度的规范。

4、精兵简政,主业只做对于本年度目标有贡献的事,给一个人发一个半人的钱让他做两个人的事儿。做减法,只有先减事儿才可能控制住人员规模,90%的精力放在碗里,10%的精力用单独的人去瞄着锅里和地里,最怕将碗里锅里地里的事儿混在一起。宁用一个精兵忙死不用三个孬兵乱死。

5、老事儿定指标精细化管理,新事儿设目标鼓励试错,以项目小组方式工作,新事儿新人做,不要增加老事儿的工作量。绝大多数人不具备并行处理能力,尤其是不具备同时负责两类不同的事情的能力,将新事儿加给老事儿的第一个后果就是老事儿开始增加人手以及变得混乱和低效。

6、先打样再推广,打样不怕慢推广必须快。任何产品和服务的推广方法,最好的方式是试点,想法可行不可行一试便知。不要担心试点丧失市场时机,做好试点既可以避免犯错,也是磨刀不误砍柴工。

分类: 经营|运维 标签: