四时宝库

程序员的知识宝库

workerman 自定义的协议如何解决粘包拆包

前言:

PHP常用类 – 缓存类 cache(php缓存机制有哪些)

<?php

/*

* 缓存类 cache

* 实 例:

Laravel-admin Grid自定义数据源(laravel 自定义命令)

使用laravel-admin grid 大多时候我们单表model或者多表简单联接(参考

PHP trick(代码审计关注点)(什么是代码审计)

随着代码安全的普及,越来越多的开发人员知道了如何防御sqli、xss等与语言无关的漏洞,但是对于和开发语言本身相关的一些漏洞和缺陷却知之甚少,于是这些点也就是我们在Code audit的时候的重点关注点。本文旨在总结一些在PHP代码中经常造成问题的点,也是我们在审计的时候的关注重点。(PS:本文也只是简单的列出问题,至于造成问题的底层原因未做详细解释,有兴趣的看官可以自行GOOGLE或者看看底层C代码。知其然,且知其所以然)

jQuery EasyUI 数据网格 - 使用虚拟滚动视图显示海量数据

数据网格(datagrid)的虚拟滚动特性可以用来显示大数量的记录而不需要分页。 当滚动垂直滚动条时,数据网格(datagrid)执行 ajax 请求来加载和刷新现有的记录。 整个刷新的行为过程是平稳的没有闪烁。 在本教程中,我们将创建一个数据网格(datagrid),并运用虚拟滚动特性从服务器加载数据。

php关于游戏合成道具成功失败机率的思路(随机概率)

今天研究了游戏中合成物品的概率问题,刚开始在网上搜了相关的资料,也看了好多别人的概率算法,但都不怎么明白,也不能满足我的要求。于是自己看了一些概率算法,也在qq群里请教了一些高人

自己写了以下的算法:

第一步是传入一个概率参数我这里给了一个80的

$rate = 80;//值越高,概率就越高

使用阿里云oss记录业务日志(阿里云的日志服务是什么技术)

阿里云oss作为一个非常好用的一个存储服务, 一般作为一些静态资源的存储,如web开发中的css、js图片等或者是客户上传的附件、图片等。今天我们来实现一个非主流的用法:用他来记录日志.

这得益于阿里云oss的"追加上传文件"接口,这样我们不需要每次获取oss上的文件内容后再手动日志内容然后后上传文件。

jQuery EasyUI 数据网格 - 设置排序

本实例演示如何通过点击列表头来排序数据网格(DataGrid)。

PHP闪电入门(8)数据类型转换(php数据类型转换分为哪两种)

需要您的鼓励!

【欢迎关注、分享、点赞或评论,您的一个举手之劳,就是最大的鼓励!】

前言:

上一节我们聊了php的数据类型,主要是整型、浮点型、布尔型,字符串型和NULL这五种类型,其他类型暂时不聊天。

php+redis实现分布式锁(php redis 分布式锁)

 /**
 * 添加锁
 * @param unknown $key_name 键的名称
 * @param unknown $uniqid 唯一值
 * @param unknown $key_expire 键的过期时间
 * @return int 0失败,1成功
 */
 static function lock($key_name, $uniqid, $key_expire)
 {
 $lua_script = <<<EOF
 local flag = redis.call("setnx", KEYS[1], ARGV[1])
 if tonumber(flag) > 0 then
 redis.call('expire', KEYS[1], ARGV[2])
 return redis.call('get', KEYS[1])
 else
 return 0
 end
EOF;
 $redis = MyRedisService::getInstance();
 return $redis->eval($lua_script, 1, $key_name, $uniqid, $key_expire); 
 }
 
 /**
 * 释放锁
 * @param unknown $key_name 键名称
 * @param unknown $key_val 键值校验
 * @return int 0失败,1成功
 */
 static function unlock($key_name, $key_val)
 {
 $lua_script = <<<EOF
 local lockKey = redis.call('get', KEYS[1])
 local lk = ARGV[1]
 if lockKey == lk then
 return redis.call('del', KEYS[1]) 
 else
 return 0
 end
EOF;
 $redis = MyRedisService::getInstance();
 return $redis->eval($lua_script, 1, $key_name, $key_val);
 }
 
 
 public function index()
 {
 //键名
 $key_name = 'index';
 
 //key过期时间
 $key_expire = 1;
 
 //键的唯一标识
 $uniqid = uniqid(null, true).microtime();
 
 //加锁
 $key_val = self::lock($key_name, $uniqid, $key_expire);
 
 //加锁成功,开始执行以下代码
 if($key_val > 0)
 {
 try
 {
 $redis = MyRedisService::getInstance();
 //从数据库或者redis中得到库存
 $store_nums = $redis->get("store_nums");
 if($store_nums > 0)
 {
 $redis->decrby("store_nums", 1);
 echo "去库存成功,剩余:".$redis->get('store_nums')."<br>";
 }
 else
 {
 echo "库存不足<br>";
 }
 }
 catch (\Exception $e)
 {
 //如果代码抛出异常,则直接删除key
 $redis->del($key_name);
 }
 }
 
 //释放锁
 $res = self::unlock($key_name, $key_val);
 
 //如果释放锁失败,则直接手动删除key
 if(intval($res) === 0)
 {
 $redis->del($key_name);
 }
 }
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接