标签归档:memcache

几种程序报警通知的方式

线上的项目出现错误不能及时知道怎么办?不及时处理影响用户体验怎么办! 在error_handle 和exception_handle 方法里添加提醒方式。 有以下几种比较及时的方式: 1.短信接口。缺点是得浪费点钱。(不过一条就6分左右。这种费钱的报警必须注意控制频率。避免碰到访问量大时出现错误报警,持续狂刷,瞬间几千条短信耗完。可以借助memcache 几分钟报警一条。) 2.发邮件 + 微信开启邮件插件。 通知很及时! 3.qq机器人。 网上关于qq机器人的php版程序很多。主要是通过curl模拟了3g.qq.com的聊天过程。组织header,抓取响应的header 弄到sid,设置一些cookie,反正搞得跟3g.qq.com走网页一样就行了。curl_setopt 那个header选项设置为 true 便于能抓到header。 4.发送微信消息。 进微信公众平台 http://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm-login&lang=zh_CN 然后你就用firebug或者chrome开发者工具研究怎么模拟提交表单吧。你要是看看qq机器人的程序弄这个很容易的。 好像是要设置2个cookie mp_user=gh_xxxxxxxxxxxxxxx mp_sid=RjU3cUQ1UU1ZVkloYXhrZE5ETUJLSmM0Q2MxYmpqaVlvcGxadThLcTJwSGNWWnFGQWJmalNwbHNCbkRTR1dOMWk3X0xkSWFmNlBzME1RRmxaU0NPZVhmUWhSRlZNc1cxeFVNTEJVWUZKbkdzY2lMOFl0T3FxSnQ1aUJYMmppSHc   进去后再看看发送给某人消息怎么发的吧。就是后台这块发消息用的一个fakeId 。你在要给某个用户发消息时链接上可以看到。 用户管理: http://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&lang=zh_CN&pagesize=10&pageidx=0&type=0&groupid=100 给某个用户发消息: http://mp.weixin.qq.com/cgi-bin/singlemsgpage?fromfakeid=60890145&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN 提交 : 网络 – 保持一下。 http://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN post参数: ajax 1 … 继续阅读

发表在 工作总结 | 标签为 , , , , , | 留下评论

Redis应用场景

1.在主页中显示最新的项目列表。 Redis使用的是常驻内存的缓存,速度非常快。LPUSH用来插入一个内容ID,作为关键字存储在列表头部。LTRIM用来限制列表中的项目数最多为5000。如果用户需要的检索的数据量超越这个缓存容量,这时才需要把请求发送到数据库。 list: lpush + ltrim  //$r->lTrim($key,0,4999); 2.删除和过滤。 如果一篇文章被删除,可以使用LREM从缓存中彻底清除掉。 list: $r->lRem($key,’find_id’,-2);/从右边删除2个value为find_id的元素 3.排行榜及相关问题。 排行榜(leader board)按照得分进行排序。ZADD命令可以直接实现这个功能,而ZREVRANGE命令可以用来按照得分来获取前100名的用户,ZRANK可以用来获取用户排名,非常直接而且操作容易。 zset: zadd z1 100 aaa   zrevrange z1 0 -1 withscores 分数从大到小 zrank z1 aaa  分数从小到大 返回aaa的排名 zincrby z1 5 111 给值为111的元素的score 加5 4.按照用户投票和时间排序。 这就像Reddit的排行榜,得分会随着时间变化。LPUSH和LTRIM命令结合运用,把文章添加到一个列表中。一项后台任务用来获取列表,并重新计算列表的排序,ZADD命令用来按照新的顺序填充生成列表。列表可以实现非常快速的检索,即使是负载很重的站点。 list: lpush … 继续阅读

发表在 Nosql | 标签为 , | 留下评论

linux下安装php的memcache、memcached的扩展及memcache服务端

一会d的一会不带d的,服务跟扩展是不是搞晕了? memcache-3.0.5.tgz 提供memcache扩展libmemcached-1.0.4.tar.gz、memcached-2.0.1.tgz 提供memcached扩展memcached-1.4.6.tar.gz 为上面2个扩展方式提供服务,memcached服务器(守护进程) 就像其他服务mysqld、httpd 安装地址可以看php手册 函数 最新手册:http://code.google.com/p/phpdoc-zh/比如想安装memcache扩展,手册里搜索memcache 查看Memcache 查看 安装/配置 下的安装 有地址显示http://pecl.php.net/package/memcache memcache扩展:http://pecl.php.net/package/memcache tar -zxvf memcache-3.0.5.tgzcd memcache-3.0.5 /usr/local/php/bin/phpize./configure –with-php-config=/usr/local/php/bin/php-configmake && make install (扩展配置方式同下面memcached的,很多php的扩展都是通过phpize搞定的) memcached扩展:http://pecl.php.net/package/memcached(summary:PHP extension for interfacing with memcached via libmemcached library)通过libmemcached 库与memcached服务交互的php扩展 tar -zxvf libmemcached-1.0.4.tar.gz cd libmemcached-1.0.4 ./configure make && make … 继续阅读

发表在 Linux | 标签为 , , , | 留下评论

队列执行效率

一个队列memcacheq存储待发送的短信,计划任务每分钟一次取100条下发,如果一分钟内未执行完毕,下次又取100条下发,如此,内存占用升高,这也是小事,好像也费不了多少内存。但是对调用移动接口下发短信的接口造成压力,一般下发接口可能做了请求频率限制,这样导致大量短信发送失败,还得想办法再插入到队列重发。改善方法:用memcache设置一个标识,开始下发时表示有下发任务,下个请求来了取该标识是否为有任务状态,没有就设置标识为有任务,然后从队列取。就是有锁直接退出,无锁就加锁干活,干完活解锁。恩,用memcache存临时性标识确实挺好的,不能只局限于想着单独的存一坨结果集什么的。

发表在 Php | 标签为 , | 留下评论

php session

今天抽时间好好把php session相关的知识看了一下,受益匪浅。 参考链接: 1.PHP会话Session使用入门 http://bbs.phpchina.com/viewthread.php?tid=50716&highlight=php%BB%E1%BB%B0 2.php5中session详解 对php.ini 配置项的详解 http://sqlnet.blog.51cto.com/343343/130274 3.PHP中的SESSION详解 http://hi.baidu.com/chendezh2/blog/item/16059a37aa0dc985a71e1227.html 4.如何去除URL中的SESSION ID  http://blog.163.com/yageeart@126/blog/static/4960228201010610471978/ 5.http中cookie与session的分析 http://www.22455.com/index.php/posts/_42   杂记: session_name()   默认在配置为PHPSESSID  有参数就是设置  (记录sessionid的cookie变量名,firefox 装个firecookie看比较直观。) session_id()   32位串 有参数就是设置 $_SESSION['TEST'] = time(); $_SESSION['TEST3'] = time(); 若为文件存储session.save_handler = files   在session.save_path设置的目录下生成文件 名为 sess_跟session_id() 文件内容形如 TEST|i:1318069225;TEST3|i:1318069259; … 继续阅读

发表在 Php | 标签为 , , | 留下评论

【转】关于session中的session_write_close

今天在做框架里面的 session的memcache存储,碰到了一些问题。 当在执行 session_set_save_handler 中设定的 write 时候,memcache的对象被释放了。 很是奇怪的问题。 搞了很久,最后还是在手册上看到问题的原因和解决办法。 在手册 session_set_save_handler 函数里面: http://www.php.net/manual/en/function.session-set-save-handler.php 有这样的警告。大概意思是“” 解决办法是:在设置 session_set_save_handler 时候 添加 register_shutdown_function是在程序结束前来执行,抢先提交session zwj说搞明白原理才能有判断。有道理。

发表在 默认分类 | 标签为 , , | 留下评论

Tokyo Tyrant

网上的一些资料的整理:   TTserver参数设置详解:http://blog.163.com/chenxiaodong_2009/blog/static/129082330201022481421504/ 利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统:http://blog.s135.com/post/362/   ln -s /usr/local/tokyocabinet-1.4.47/lib/libtokyocabinet.so.9 /usr/local/lib/libtokyocabinet.so.9 tokyotyrant优点:1.用Tokyo Cabinet读写速度非常快,是Berkeley DB 等 DBM 的几倍。2.故障转移 (双机互为主辅模式)3.日志文件体积小4.任何Memcached客户端均可直接调用tokyotyrant。还可以通过HTTP方式调用 curl -X PUT http://192.168.0.249:1978/key -d "value"curl http://192.168.0.249:1978/keycurl -X DELETE http://192.168.0.249:1978/key 缺点:1.存进去的数据不到满了不会过期 2.当我们从中取数据时,会是一个序列化的字符串,没有自动反序列化处理3.32位操作系统 Tokyo Cabinet 数据库单个文件不能超过2G 启动:ttserver -host 192.168.0.249 -port 1978 -thnum 8 -dmn … 继续阅读

发表在 服务器端 | 标签为 , , | 留下评论

php获取memcache内所有键值对

网上看了一个,可以取到所有key值。但是发现php手册里写的稍微有点不一样。 php手册 Memcache::getExtendedStats Note: 这个函数在Memcache2.0.0版本加入。 Note: (译注)获取Memcache内所有数据方法:首先使用getExtendedStats(‘slabs’)获取到每个服务器上活动slabs分块的id, 然后 使用getExtendedStats(‘cachedump’, $slabid, $limit)来获取每个slab里面缓存的项,其中$slabid是slab分块id, $limit指 期望获取其中的多少条记录。 整合了一下: function show($host,$port){    $memcache_obj = new Memcache();    $memcache_obj->addServer($host, $port);    //echo $memcache_obj->getversion();    $memcache_obj->set(‘xx’,’xx’);   $memcache_obj->set(‘yy’,’yy’);   $memcache_obj->set(‘zz’,’zz’);       //方式一 网上的    $result = $memcache_obj->getExtendedStats(‘items’);    $items=$result["$host:$port"]['items'];        //方式二 php手册说的   //$result = $memcache_obj->getExtendedStats(‘slabs’);    //$items = … 继续阅读

发表在 Php | 标签为 , , | 留下评论

memcacheq

详情见:http://memcachedb.org/memcacheq/ 基于memcache的一个队列服务,也就是相同的key值设置多个值就形成了一个队列,先进先出。出了就取不到了。 php程序存取跟memcache 一样。 linux安装脚本: #!/bin/bashcd /usr/local/src/LNMP/memcacheqtar xzf db-5.2.28.tar.gz cd db-5.2.28cd build_unix/../dist/configuremakemake installcd /usr/local/src/LNMP/memcacheqtar xzf libevent-1.4.14b-stable.tar.gzcd libevent-1.4.14b-stable./configuremakemake installecho "/usr/local/BerkeleyDB.5.2/lib" >>/etc/ld.so.confldconfigcd /usr/local/src/LNMP/memcacheqtar xvzf memcacheq-0.2.0.tar.gzcd memcacheq-0.2.0sed -i ‘s/BerkeleyDB.4.7/BerkeleyDB.5.2/g’ configure //好像是它的configure脚本里写死了berkeleydb的版本。。。./configure –enable-threadsmakemake installmkdir /data/memcacheqmemcacheq -d -r -H /data/memcacheq -N -R  -L 1024 -B … 继续阅读

发表在 服务器端 | 标签为 , , , , , | 留下评论

2011.3月工作总结

目前弄一个网页即时聊天的东西,现有的网站本来有,要弄到新网站上,要改好多东西。总算从头到尾把整个流程搞清楚了。 用户:发送消息,js即时显示它在聊天框,ajax发送此消息给php处理,php插入消息并且查询客服的最新的一条消息,把客服的消息等信息以json形式返回给js,ajax调用完成complete后再次发起此同样的请求,成功success后在聊天框显示客服的消息,错误error在聊天框显示发送失败。 客服端一样。 大厅表hall 表,记录客服和用户的id,ip,客服的状态等 房间表room_x(可以分多个表,根据用户id或者啥的),记录聊天开始时间,结束时间,有效时间客服打开窗口产生记录,sid等 聊天横向记录表 consultlist  (分表或者定时向其他多个分表复制)主键sid ,记录一对一的一次聊天的信息 临时聊天信息表 info_x 临时存储聊天内容(分10个表,按sid%10取余),结束咨询时转移到consultinfo_x中 聊天信息表 consultinfo_x(数据量特大,需要分表),sid,消息内容,发送时间   可以用个js数组记录上一次返回的信息,如response,本次返回的为json。 response.sid<1 && json.sid>0 认为有用户进入,可以在此发送欢迎语什么的! response.sid>0 && json.sid<1 咨询已结束 另外客服的每次轮询处理,都更新它最后的活跃时间,可以记录在memcache中,可以根据这个时间比当前时间小20秒(假如为20秒,传输信息一般要不了这么长时间)判断客服是否关闭了窗口。 另外用memcache记录两段最后说话时间,一方超时5分钟,提示用户,时间到了,结束操作,日志记录!   客服端打开窗口等待用户进入时,hall表产生一条记录id,ip,status等,room_x产生一条记录id等 用户进入:consultlist产生记录产生sid,hall表填充用户数据,room表填充用户数据、保存sid、记录开始时间等 聊天时:不断更新room表记录,如有效时间 结束操作:将room表的信息转移给consultlist表,room表信息清空,hall表清空用户数据继续等待,info表数据转移到consultinfo_x,info_x表清空。

发表在 工作总结 | 标签为 , , , | 留下评论