導航:首頁 > 編程語言 > 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計數器相關的資料

熱點內容
信號分析pdf 瀏覽:925
暴力刪除命令 瀏覽:801
qt如何編譯加快速度 瀏覽:903
php添加數據sql語句 瀏覽:717
免費的小說app有什麼 瀏覽:405
螺桿壓縮機進氣閥動畫 瀏覽:651
兩台伺服器如何做負載均衡 瀏覽:227
程序員的工資是漲的嗎 瀏覽:813
視頻存儲伺服器可以干什麼 瀏覽:463
創建文件夾安裝失敗怎麼回事 瀏覽:832
程序員高考隔了幾年 瀏覽:822
雲伺服器是哪一層 瀏覽:22
jit編譯器的jit什麼意思 瀏覽:330
我想清理手機中空白文件夾 瀏覽:976
電腦e盤文件夾刪不掉怎麼辦 瀏覽:607
外圓凹圓弧編程 瀏覽:461
html5編程題 瀏覽:839
乾燥機製冷壓縮機一開就跳動 瀏覽:388
吉林壓縮空氣流量監測 瀏覽:618
根據地址獲取經緯度php 瀏覽:13