免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 草屋主人

[开源]phplock(php进程锁) v1.0 beta1 [复制链接]

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2009-12-02 20:16 |显示全部楼层
分析得很透彻啊。

论坛徽章:
0
发表于 2009-12-04 18:19 |显示全部楼层
我现在碰到这个问题 数据接近千万 第一次刷新也奇慢 目前解决办法是 发现文件缓存失效 不立即查数据库更新 而是向后台发送一个通知 后台程序定时按取通知队列查询数据库更新缓存

论坛徽章:
0
发表于 2009-12-14 17:47 |显示全部楼层
可以尝试使用 Semaphore

论坛徽章:
0
发表于 2009-12-18 13:03 |显示全部楼层
发个数据测试吧

论坛徽章:
3
金牛座
日期:2013-10-12 15:42:452015年辞旧岁徽章
日期:2015-03-03 16:54:15IT运维版块每日发帖之星
日期:2016-06-01 06:20:00
发表于 2009-12-19 07:32 |显示全部楼层
勇气可嘉
首先,文件锁是解决不了分布式应用的。
再有,如果加锁失败,应该等待数据的完成,不应该是退出,而数据何时完成没有通知机制,可以用阻塞文件锁、在文件中写是否已经建立缓存的标识等手段。如果加锁时不能立即获得锁会在锁队列中等待,等获得锁时查看文件内容里的标识,如果缓存已经建立再读缓存,缓存未建立 建立缓存。

论坛徽章:
3
金牛座
日期:2013-10-12 15:42:452015年辞旧岁徽章
日期:2015-03-03 16:54:15IT运维版块每日发帖之星
日期:2016-06-01 06:20:00
发表于 2009-12-19 07:52 |显示全部楼层
真的很佩服楼主,四年没超过20贴!!!

论坛徽章:
0
发表于 2009-12-21 09:20 |显示全部楼层
除非把锁加在$cache=getCache($key);之前,否则不能达到同步效果,

但真加到$cache=getCache($key);之前,
为了"在缓存失效的一瞬间"值得吗?

论坛徽章:
0
发表于 2009-12-21 16:46 |显示全部楼层
可以用来做操作系统课程的掩饰教程

论坛徽章:
0
发表于 2009-12-22 09:19 |显示全部楼层
原帖由 sunceenjoy 于 2009-12-21 09:20 发表
除非把锁加在$cache=getCache($key);之前,否则不能达到同步效果,

但真加到$cache=getCache($key);之前,
为了"在缓存失效的一瞬间"值得吗?


不能每次都加到$cache=getCache($key);之前,不然并发获取同一个key的都会锁,这里只是需要对失效后,对数据库的耗时操作进行锁,也就是说不要失效的用户都去数据库查询,让其中一个查询出来,其他人等到这个人查询好了直接使用即可,避免不必要的浪费。

论坛徽章:
0
发表于 2009-12-22 17:05 |显示全部楼层
原帖由 sunceenjoy 于 2009-12-21 09:20 发表
除非把锁加在$cache=getCache($key);之前,否则不能达到同步效果,

但真加到$cache=getCache($key);之前,
为了"在缓存失效的一瞬间"值得吗?

  1. $result = getCache($key);
  2. if ($result === false) {
  3.     lock($key);
  4.     $result = getCache($key);
  5.     if ($result === false) {
  6.         $result = db->query(......);
  7.         setCache($key, $result);
  8.     }
  9.     unlock($key);
  10. }
复制代码

[ 本帖最后由 四不象 于 2009-12-22 17:06 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP