导航:首页 > 编程语言 > phpredis计数器

phpredis计数器

发布时间:2022-06-08 16:32:46

① redis适合什么场景

1、缓存。 缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非常多。(推荐:《 Redis视频教程 》)
2、排行榜。 很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。
3、计数器。 什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。
4、分布式会话。 集群模式下,在应用不多的情况下一般使用容器自带的session复制功能就能满足,当应用增多相对复杂的系统中,一般都会搭建以Redis等内存数据库为中心的session服务,session不再由容器管理,而是由session服务及内存数据库管理。
5、分布式锁。 在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,实际应用中要考虑的细节要更多。

php redis Hash 怎么通过 一个指定的value 查找到对应的 key 值

phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系很有用;

如果对系统存储使用的数据以两种角度分类,一种是按数据的大小划分,分成大数据和小数据,另一种是按数据的冷热程度划分,分成冷数据和热数据,热数据是指读或写比较频繁的数据,反之则是冷数据。

可以举一些具体的例子来说明数据的大小和冷热属性。比如网站总的注册用户数,这明显是一个小而热的数据,小是因为这个数据只有一个值,热是因为注册用户数随时间变化很频繁。再比如,用户最新访问时间数据,这是一个量比较大,冷热不均的数据,大是数据的粒度是用户级别,每一个用户都有数据,如果有一千万用户,就意味着有一千万的数据,冷热不均是因为活跃用户的最新访问时间变化很频繁,但是可能有很大一部非活跃用户访问时间长时间不会发生变化。

大体而言,Redis 最适合处理的是小而热,而且是写频繁,或者读写都比较频繁的热数据。对于大而热的数据,如果其它方式很难解决问题,也可以考虑使用 Redis 解决,但是一定要非常谨慎,防止数据无限膨胀。原因如下:

首先,对于冷数据,无论大小,都不建议放在 Redis 中。Redis 数据要全部放在内存中,资源宝贵,把冷数据放在其中实在是一种浪费,冷数据放在普通的存储比如关系数据库中就好了。

其次,对于热数据,尤其是写频繁的热数据,如果量比较小,是最适合放到 Redis 中的。比如上面提到的网站总的注册用户数,就是典型的 Redis 用做计数器的例子。再比如论坛最新发表列表,最新报名列表,可以控制数量在几百到一千的规模,也是典型的 redis 做最新列表的使用方式。

另外,对于量比较大的热数据(或者冷热不均数据),使用 Redis 时一定要比较谨慎。这种类型数据很容易引起数据膨胀,导致 Redis 消耗内存巨大,让系统难以承受。薄荷的一个惨痛教训是把用户关注(以及被关注)数据放在 Redis 中,这是一种数据量极大,冷热很不均衡的数据,在几百万的用户级别就占用了近 10 GB左右内存,让 Redis 变得难以应付。应对这种类型的数据,可以用普通存储 + 缓存的方式。

如果用对了地方,比如在小而热的数据情形,Redis 表现很棒,如果用错了地方,Redis 也会带来昂贵的代价,所以使用时务必谨慎。

③ php中使用session网页计数器

你的思路有点混乱
session_start();之前不能有输出
如果session中没有count,就让$count++这显然不行,建议你用文本记录$count
这样写
<?
session_start();
$datfile='data.dat';
if(file_exists($datfile)){
$data=implode('',file($datfile));
$data=$data*1;
}else{
$data=0;
}
$fp=fopen($datfile,'w');
fwrite($fp,$data+1);
fclose($fp);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>session网页计数器</title>
</head>
<body>
<p>
您好,你已经浏览本网页<?php echo $data;?>次
</p>
</body>
</html>

④ 用PHP做计数器遇到的问题

你sql语句没写好,或者数据库连接出现错误!
你的$result是false!

$result=mysql_query($sql);//后面添加
if(!$result){
echo "数据库查询失败";
}
就知道了!

$conn=mysql_connect($mysql_sever_name,$mysql_username,$mysql_password);
//准备好你的SQL语法
$sql="INSERT INTO `jiajia`.`saturn` (`new`)VALUES ('1');";
这几句改一下

$conn=mysql_connect($mysql_sever_name,$mysql_username,$mysql_password);
if(!$conn){
echo "数据库连接失败";
}
//准备好你的SQL语法
$sql = "insert into saturn(new) values(1)";

试看看

重新检查一下你的表设置! 把表结构发出来!

⑤ php计数器

你的html头是utf-8的

所以可能是你的这个php不是utf-8编码的问题吧,

我这能出来。

⑥ 求php编写的网页计数器代码(用cookie防止重复刷新计数)

<?php
$cFile="count.txt";
$acctime=time();
if(file_exists($cFile)){
$fp=fopen($cFile,"r");
$str=fgets($fp,22);
fclose($fp);
$count=trim($str);
$count++;
}else{
$count=1;
}
$first=false;
if(!isset($_COOKIE['acctime'])){
setcookie("acctime",$acctime,time()+3600*24);
$first=true;
$acctime=3600*24+$acctime;
}else{
$acctime=3600*24+$_COOKIE['acctime'];
}
if($first||$acctime<=time()){
$count=sprintf("%d",$count);
$fp=fopen($cFile,"w");
fputs($fp,$count);
fclose($fp);
}else{
$count--;
}
print "您是第 ".$count." 位访客。您下次访问计入统计的时间是:".date("Y-n-j H:i:s",$acctime)."。";
?>

⑦ php计数器代码数字超过十几位就显示结果为1.2345678912346E+25,怎么才能全部显示出来

创建一个数据库表
表名:table_counter

字段:number int(10)

1.显示统计数据

$sql = "SELECT * FROM table_counter";

2.每次刷新页面 执行sql

$sql = "UPDATE table_counter SET number= number+ 1";

如果要做的精确一点

在加一个表

table_visit

字段:ip

1更次刷新取得游客$ip;

2.取得$ip后.查询 table_vist .

如果存在则不更新table_counter.

如果不存在,则更新table_vist ,更新语句同上.并把$ip插入table_visit

如果还需要做的更人性化一点.设置一个时间间隔,比如说10分钟.$diff = 600;

在table_visit再加上一个字段

datetime :int(10)(时间戳).记录游客访问时间.

1更次刷新取得游客$ip 和 时间$date = time();

2.查询 table_vist .

$sql = "SELECT * FROM table_vist WHERE ip = '$ip'";

3.如果不存在.则把$ip和$date插入表table_vist.

$sql = "INSERT INTO table_vist SET ip = '$ip',timedate=$date";

并更新table_counter;

4.如果存在,则判断该条查询结果的timedate 和 现在时间$date,的差值.和 $diff比较

少于则不做任何操作.

大于则更新table_vist 。$sql = "UPDATE table_vist SET timedate = $date WHERE ip = '$ip'";
并更新table_visit;

⑧ 求救!!!php写的计数器,在主页包涵的时候,多了个1

<?php echo include"jishu.php"; ?>
each 去掉,另外给你升华下,看看这个按照小时计算的记数器.你能学到很多对数据库的操作,和数组\函数等基本技术.努力!!
point.php
require_once("fun.php"); //包含数据库连接和函数

/*****************************新建部分*****************************/

//检查今天是否建立了数据
$query_d = "select * from i_visit where i_date = '$d'";
$result_d = @mysql_query( $query_d , $link_p )or die("Query Error!");

//如果没有-------建立
if(!mysql_num_rows($result_d))
{
$i_time=cout_time();
$i_point=cout_point();

$query_in="insert into i_visit ( i_point , i_date , i_time )
values ( '$i_point' , '$d' , '$i_time' )";
@mysql_query( $query_in , $link_p ) or die("Insert error");

//echo "创建成功<br>";
}

/*****************************更新部分*****************************/

else
{
$i_data = mysql_fetch_array($result_d);
$i_p = last_p($i_data["i_point"])+1 ; //最后点数
$i_h = last_p($i_data["i_time"]) ; //最后时间

//如果最后一个时间不是现在时间
if($i_h != $h)
{
$i_time = cout_time();
$i_point = cout_point($i_data["i_point"],$i_h);

$query_in="update i_visit set i_point= '$i_point' , i_time= '$i_time' where i_date='$d'";
@mysql_query( $query_in , $link_p ) or die("Update error");
//echo "修改成功";
}
//如果是最后一个时间
else
{

$i_point=cout_point($i_data["i_point"],$i_h);
$query_in="update i_visit set i_point= '$i_point' where i_date='$d'";
@mysql_query( $query_in , $link_p ) or die("Update error");
//echo "当前数字是$i_p<br>"; /*****************时刻准备关闭的*/
}
}

/*****************************统计部分:*****************************/
$date_s=$d;$date_e=$d; //统计日期
$query ="select * from i_visit where i_date >= '$date_s' and i_date <= '$date_e' order by i_date";
$result=@mysql_query( $query , $link_p ) or die("search error");
$s_num=mysql_num_rows($result);

//日统计
if( $s_num == 1 )
{
$s_row=mysql_fetch_array($result);
$s_array = explode( "," , $s_row["i_point"] );
$s_avp=24;
$s_sum=array_sum($s_array);
}
//如果是多天
elseif( $s_num > 1 )
{
$s_array=array();$i=0;$s_sum=0;
while ( $s_row=mysql_fetch_array($result) )
{
$temp = explode(",",$s_row["i_point"]);
$s_array[$i] = array_sum($temp);
$s_sum+=$s_array[$i]; //计算总和
$s_array[$i+1] = $s_row["i_date"]; //基数为日期,偶数为数据;
$i+=2;

}
$s_avp=count_days($date_e,$date_s);

}
else
{
echo "没有数据";
flush();
}

$s=implode(",",$s_array);
$s_sum=$s_sum; //总和
$s_max=max($s_array); //最大数
$s_count=count($s_array); //总数
$s_avp=round($s_sum/$s_avp); //平均数
@mysql_close($link_p);
?>

fun.php
<?php
date_default_timezone_set ('Asia/Shanghai');
$d=date("Y-m-d");
$h=date("G");

$link_p=@mysql_connect("localhost","root","00000000")or die("Connect Error");
$select=@mysql_select_db("hit",$link_p) or die ("Select Error");

//时间输出
function cout_time()
{
global $h;
$temp="";
for( $i = 0 ; $i < $h ; $i++)
{
$temp .="$i,";
}
$temp.=$h;
return $temp;
}
//点数输出
function cout_point($x=0,$y=0) //x为要添加的字串,Y为最后时间,Z为更改数
{
global $h;
while($h-$y)
{
$y++;
$x .=",0";
}
$temp=strrpos($x , ",")?strrpos($x , ",")+1:0;

return substr( $x ,0, $temp). (substr($x,$temp)+1);
}

//最后时间
function last_p($x)
{

return substr( $x , strrpos($x , ",")+1 ) ;
}

?>

你可以研究下cout_point函数,如何用explode implode把它写出来

⑨ PHP计数器问题

首先你第一句的赋值都已经写错了:
$conterFile="counter.txt";
更正为
$counterFile="counter.txt";
你改好这一句,就不会再提示那些出错提示,基本就OK了!
至于exec()来执行LINUX的命令我在公司测试没LINUX,不过和win环境也差不多,只是相关语法有些不同,还有注意LINUX下的权限!回家我再后我的UBUNTU来测试一下!欢迎加群学习,QQ群4790006
下面给出我在win下测试成功的例子

<html>
<head>
<title>文本计数器</title>
</head>
<body>
<?php
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$counterFile="$DOCUMENT_ROOT/study/counter.txt"; //注意实际路径
//echo $counterFile;
function disp($counterFile)
{
$fp =fopen($counterFile,"rw");
$num =fgets($fp,6);
fclose($fp);
$num+=1;
echo $num;
print "您是本站的第"."$num"."位贵客";
unlink("$counterFile"); //exec("del $counterFile")执行不成功
exec("echo $num >> $counterFile"); //创建并写值
}
if(!file_exists($counterFile))
{
exec("echo 0 >> $counterFile");
}
disp($counterFile);
?>
</body>
</html>

⑩ redis 什么时候使用 bitset

redis现在的发展受作者的影响太大。他的milestone没有规划的特别好,导致每个版本之间的差别很大,没有一致性。
使用下来觉得queue很有用。然后做一些计数器确实不错。
觉得redis应该改进的地方:
分布式的支持,其实只用跟memcached一样在客服端支持就行。
VM这些特性到底有没有用?
redis的php驱动用下来感觉不错phpredis。

阅读全文

与phpredis计数器相关的资料

热点内容
显示当前模式下所有可执行的命令 浏览:758
为什么程序员拿了股份还要高薪 浏览:946
电脑运行命令里的记录能删吗 浏览:697
linuxwss 浏览:848
一个软件需要登录服务器地址 浏览:923
哪里有解压程序 浏览:299
java静态方法内存 浏览:545
我的世界ec服务器如何带vip 浏览:737
什么是由解析器域名和服务器构成 浏览:414
自动识别电影信息源码 浏览:849
柱筋箍筋加密区怎么算 浏览:48
钢筋中加密15倍是什么意思 浏览:366
esc加密算法 浏览:518
linux运行exe命令 浏览:124
一级建造师管理pdf 浏览:720
如何更改服务器登录账号 浏览:317
看pdf文件软件 浏览:183
android恢复模式 浏览:808
生命令人忧 浏览:597
魔兽搬砖怎么选择服务器 浏览:771