- 浏览: 260724 次
- 来自: 北京
最新评论
-
vae0921:
很详细,刚好在考虑统计每个月登录超过多少天的用户
只不过我们是 ...
用redis实现用户登录计数 -
iwindyforest:
介绍的很详细, 多谢指教, 另外:打开慢查询日志功能需要有Su ...
Mysql 慢查询日志 -
hexawing:
Office Outlook 2010貌似不支持这个,会显示成 ...
如何在邮件中嵌入图片,而非上传在附件 -
xq_blessing:
Yii framework非常好的php框架,偶也正在研究中! ...
Yii的log分析
文章列表
一.groupcache介绍
memcached作者Brad Fitzpatrick用Go开发了前者的替代版,现已在Google多个生产环境(如dl.google.com)中投入使用。本文粗略介绍一下groupcache的实现方式。
memcached的业务架构如下图,memcache的分布式不是服务器端实现,而是通过客户端实现;是客户端根据key自己计算决定memcached实例 。
groupcahe的业务结构如下图,key的存储采用分布式方式,key通过一致性哈希分散在各个实例中,通过任意一个实例皆可得到数据。
二.groupcahe数据结构
1.byteview
bytev ...
记录请求到log,为了方便后续排查问题,在PHP里调用一个方法,实现将curl串记录下来即可方便复现请求。
<?php
/**
* Author: xishizhaohua@qq.com
* Date: 2015/11/2
*
*/
function getCurlCommand()
{
try {
if (php_sapi_name() == 'er ...
Redis事务---那鸡肋一样的存在
- 博客分类:
- redis
弃之如可惜,食之无所得
一.Redis事务简述
Redis的事务是下面4个命令来实现
1.multi,开启Redis的事务,置客户端为事务态。
2.exec,提交事务,执行从multi到此命令前的命令队列,置客户端为非事务态。
3.discard,取消事务,置客户 ...
一.设计模式-发布订阅模式
发布订阅模式,又叫观察者模式,属于四人帮的二十三个设计模式中的行为模式。”定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于他的对象都会得到通知并被自动更新“,模式UML如下图。
通俗一点可以理解为,Subject中保存了Observer的引用组成的列表。Subject状态变化时,遍历列表调用所有Observer的notify成员方法。
发布订阅模式应用场景很多,相当于在系统中构建一个简单的事件处理系统,部分编程语言(如java提供被观察者类java.util.Observable和观察者接口java.util.Observer)原生库中已包含 ...
Redis内部涉及 的数据结构
- 博客分类:
- redis
Redis就是内存中维持一个巨大的字典,字典的key节点及value节点是一个个数据结构。
在这里简单介绍一下Redis用到的数据结构。
1.简易动态字符串(sds)
Redis没有使用传统的C字符串形式,取而代之的是自己实现了一个简单动态字符串简易动态字符串结构,简称为SDS(Simple Dynamic Strings)。
SDS兼容C字符串的同时,带来了二进制安全、计算更有效率、杜绝缓冲区溢出等优点。
struct sdshdr {
/*字符串的长度。因为最后一个字节需为'\0',所以也是buf已经使用的空间的长度-1*/
int len;
/*bu ...
先从一个常见的问题入手,在页面中显示今天的星期,如果还用下面的方式,那就需要好好看看本文章了
$result = '';
switch (date('w')){
case 0:
$result ='星期日';break;
case 1:
$result ='星期一';break;
case 2:
$result ='星期二';break;
case 3:
$result ='星期三';break;
case 4:
$result ='星期四';break; ...
深入PHP-直观观察array的扩展
- 博客分类:
- PHP
皆知PHP的数组是由HashTable和双链表实现的,为了方便大家查看数组的数据结构,开发一个遍历PHP的数组生成Dot描述的PHP插件,生成dot描述以后可以通过一些渲染工具生成图像,本例用的是 Graphviz。
扩展的实现很简单,PHP数组源码是由下面的两种结构体实现的,扩展就是将这两种结构体和各个结构体的关系遍历一遍,生成对应的Dot描述即可。
typedef struct bucket {
ulong h;
uint nKeyLength;
void * pData;
...
最近项目中遇到这样一个case,感觉所有的Model类都须是单例性能更高.因为所有的model皆继承统一父类BaseModel,所以在BaseModel中添加控制单例的代码,简单演示如下:
/*基类*/
class BaseModel
{
private static $instance = null;
public static function instance()
{
if (empty(self::$instance)) {
self::$instance = new self();
...
项目中经常用到PHP用UDP调用C++服务,我们这边的PHP 请求方法封装如下,一直没有问题出现,今天接入新的服务出现了问题
public static function request($reqBuffer,$host,$port)
{
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
//设置发送数据超时时间
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec&quo ...
PHP RSA加解密示例
- 博客分类:
- PHP
1.生成密钥和公钥
开始前需要准备openssl环境
linux 需要安装openssl工具包,传送门http://www.openssl.org/source/
window 下需要安装openssl的程序,传送门http://slproweb.com/products/Win32OpenSSL.html
如果不想安装,可以用本例提供的密钥和公钥进行测试。
密钥生成
openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度和密码保护,具体参数请参考文档。
openssl genrsa -out rsa_private_key.pem 1024
-out 指定生成 ...
花了半个月实现实现的会员开通系统,最近需求更改导致这个系统报废........ , 心里几万匹羊驼在咆哮。在这里留个存档,表明俺也奋斗过。
系统用了陈硕的muduo网络库,被我们这边同事改进,增加了UDP支持以适配公司的内部协议。
整个系统有3个模块,接收用户付账信息模块、订单处理模块和用户会员信息存储模块。各模块通讯通过protobuf编码的UDP协议。接收用户付账信息模块和订单处理模块中间有几个用redis list组织的队列进行异步处理。
1.先来介绍第一个模块接收用户付账信息模块
用户开通月会员和年会员的信息都会通过计费系统发送给我方一个流水日志,采用TCP连接。流水需要快速处 ...
boost::function对象与函数指针比较相似,优点在于它拥有更大的弹性,目标既可以是普通函数、函数对象或者类的成员函数,而且还可绑定参数,给回调提供了极大的方便。但是C语言的函数是不支持boost::function对象的,当需要函数指针的C函数填写上boost::function对象时候,就出现下面的error
cannot convert 'boost::function<void*(void*)>' to 'void* (*)(void*)'
其实我们可以在中间加上一个proxy的函数来解决
如下,pthread_create需要的为函数指针,而我们需要绑定一些参 ...
使用接口(interface),可以指定某个类必须实现(可空实现)一簇方法,实现关键字为 implements, 类可以实现多个接口,用逗号来分隔多个接口的名称。
按理说interface是PHP开发中依赖倒置原则的重要力量,但是PHP弱类型特性使其地位非常尴尬,除非为了多继承,在项目中还真没有它来干过啥。
PHP提供的多个接口主要是让对象试用数组的操作方式,在此主要介绍一下Iterator、ArrayAccess、Countable 顺便介绍一下PHP5.5中以后的生成器yield
1.Iterator接口
Iterator可在内部迭代自己的外部迭代器或类的接口,如使用foreach、wh ...
PHP简单的手机验证码验证过程
- 博客分类:
- PHP
做过一个需求:广告主后台发起调查活动,普通用户参加此调查后跳转值某个网址领取1Q点(1角钱);上线一段时间以后,广告主反馈得到的很多手机号都是伪造的(我们开始只用正则匹配判断手机号正确与否),然后产品让我们加上手机短信验证,就变成了下面的样子.
刚开始的思路应该很正常的那种,用rand生成随机码,然后存在redis里边,设置expire为60秒;后来考虑考虑,用户为了1角钱不至于如此,需要验证码的时候也不会瞎填写,系统还限制某ID用户明天每天只能参加5次这种活动,也为了不浪费系统资源的原则,公司发的短信已经需要2分钱一条,决定不用redis,用下面的思路:
用用户帐号+活动ID+手机号 ...
前段时间某个需求:客户提交简单的表单可以创建一个适应于全终端(PC,Pad,Phone)的刮刮卡活动H5页面,其中涉及到客户可在线生成限额6W奖品码的功能。
因为需要保持每个活动奖品码的唯一,我们先是准备用PHP的uniqid函数来生成UUID(Universally Unique IDentifier,也叫GUID,为全局唯一标识符,是一种由算法生成的唯一标识)来生成。
但当我们用生成1W测试时候,发现生成过些需要几十秒,还不包括插入至数据库的时间,然后用xhprof写了个简单例子进行性能测试
<?php
xhprof_enable(XHPROF_FLAGS_CPU|XHPRO ...