本文目錄一覽:
PHP刪除Redis所有數據
1、創建userinfo_update.php,用於查詢用戶信息,先顯示信息,在修改:先通過GET獲取用戶編號查詢用戶信息:$sql = “select * from user_info where user_id='”.$_GET[‘userId’].”‘”; $result = mysql_query($sql,$con);if($row = mysql_fetch_array($result)){}。
2、頁面效果。
3、創建update.php,用於修改用戶信息:使用到了mysql_affected_rows() 函數返回前一次 MySQL 操作所影響的記錄行數。//通過post獲取頁面提交數據信息$userId = $_POST[userId];
$userName = $_POST[userName];$userAge = $_POST[userAge];
4、$sql = “update user_info set user_name='”.$userName.”‘,user_age=”.$userAge.” where user_id='”.$userId.”‘”;mysql_query($sql,$conn);//執行SQL$mark = mysql_affected_rows();//返回影響行數$url = “userinf_select.php”; 。
5、運行結果。
php中關於redis和數據庫
select 查詢的時候始終先查 redis 有沒有,沒有去查數據庫,再把結果緩存起來;
update 修改完數據庫內容後,同時對 redis 中緩存的數據做一下 update 更新操作,這樣 select 查詢 redis 的時候就是查詢的最新數據;
同理,delete、insert 操作數據庫後也要同時對 redis 中緩存的數據做 update 更新操作,這樣 select 查詢 redis 的時候就是查詢的最新數據;
這樣,所有的查詢操作就都是對 redis 做緩存讀取,可以緩解數據庫的壓力;
如何查看php是否成功裝上redis擴展
用命令進行測試啊,下面是步驟:
Linux代碼
$ /usr/local/webserver/redis/bin/redis-server /etc/redis/redis.conf
$ /usr/local/webserver/redis/bin/redis-cli set foo bar
//輸出內容
OK
$ /usr/local/webserver/redis/bin/redis-cli get foo
//輸出內容
“bar”
命令行連接:
/usr/local/webserver/redis/bin/redis-cli -h 192.168.1.112 -p 6379
php 分頁查詢怎麼redis緩存
對於有分頁條件的緩存,我們也可以按照不同的分頁條件來緩存多個key,比如分頁查詢產品列表,page=1limit=10和page=1limit=5這兩次請求可以這樣緩存查詢結果
productList:page:1:limit:10
productList:page:1:limit:5
這個是一種常見方案,但是存在着一些問題:
緩存的value存在冗餘,productList:page:1:limit:10緩存的內容其實是包括了productList:page:1:limit:5中的內容(緩存兩個key的時候,數據未發生變化的情況下)
僅僅是改變了查詢條件的分頁條件,就會導致緩存未命中,降低了緩存的命中率
為了保證數據一致性,需要清理緩存的時候,很難處理,redis的keys命令對性能影響很大,會導致redis很大的延遲,生產環境一般來說禁止該命令。自己手動拼緩存key,你可能根本不知道拼到哪一個page為止。
放棄數據一致性,通過設置失效時間來自動失效,可能會出現查詢第一頁命中了緩存,查詢第二頁的時候未命中緩存,但此時數據已經發生了改變,導致第二頁查詢返回的和第一頁相同的結果。
以上,在分頁條件下這樣使用常規方案總感覺有諸多困擾,諸多麻煩,那是不是就應該放棄使用緩存?
基於SortedSet的分頁查詢緩存方案
首先想到的解決方法是使用@see ListOperationsK, V不再根據分頁條件使用多個key,而是使用一個key,也不分頁將全部的數據緩存到redis中,然後按照分頁條件使用range(key,start,limit)獲取分頁的結果,這個會導致一個問題,當緩存失效時,並發的寫緩存會導致出現重複數據
所以想到通過使用set來處理並發時的重複數據,@see ZSetOperationsK, V
代碼邏輯如下:
range(key,start,limit)按照分頁條件獲取緩存,命中則直接返回
緩存未命中,查詢(沒有分頁條件)數據庫或是調用(沒有分頁)底層接口
add(key,valueScoreMapvalue,score)寫入緩存,expire設置緩存時間
當需要清理緩存時,直接刪除key,如果是因為數據新增和刪除,可以add(key,value,score)或remove(key,value)
redis中會按照score分值升序排列map中的數據,一般的,score分值是sql語句的order by filedA的filedA的值,這樣能保證數據一致性
但是這種方式也存在一定問題:
這個key緩存的value確實是熱數據,但可能只有少數數據被頻繁使用其餘的可能根本就未被使用,比如數據有100頁,實際可能只會用到前10頁,這也會導致緩存空間的浪費,如果使用了redis虛擬內存,也會有一定影響
sql查詢由原來的分頁查詢變成了不分頁查詢,緩存失效後,系統的處理能力較之前會有下降,尤其是對於大表.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/309801.html