導航:首頁 > 編程語言 > rediskeysphp

rediskeysphp

發布時間:2022-12-18 15:39:29

⑴ 有沒有人遇到過 redis keys 無法顯示所有的key值

如果你是redis集群的話,在命令行輸入 keys * 只會返回其中一個redis實例上所有key,要想顯示所有的key就要遍歷每台實例,命令行中我不知道怎麼做,但是代碼中可以這么做:以JAVA為例:
public TreeSet<String> keys(String pattern) {
TreeSet<String> keys = new TreeSet<>();
// 遍歷集群中每個節點,在每個節點實例上執行keys *
Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes();
for (String k : clusterNodes.keySet()) {
JedisPool jp = clusterNodes.get(k);
Jedis connection = jp.getResource();
try {
keys.addAll(connection.keys(pattern));
} catch (Exception e) {
e.printStackTrace();
} finally {
connection.close();
}
}
return keys;
}

php 分頁查詢怎麼redis緩存

對於有分頁條件的緩存,我們也可以按照不同的分頁條件來緩存多個key,比如分頁查詢產品列表,page=1&limit=10和page=1&limit=5這兩次請求可以這樣緩存查詢結果

proctList:page:1:limit:10

proctList:page:1:limit:5
這個是一種常見方案,但是存在著一些問題:

緩存的value存在冗餘,proctList:page:1:limit:10緩存的內容其實是包括了proctList:page:1:limit:5中的內容(緩存兩個key的時候,數據未發生變化的情況下)

僅僅是改變了查詢條件的分頁條件,就會導致緩存未命中,降低了緩存的命中率

為了保證數據一致性,需要清理緩存的時候,很難處理,redis的keys命令對性能影響很大,會導致redis很大的延遲,生產環境一般來說禁止該命令。自己手動拼緩存key,你可能根本不知道拼到哪一個page為止。

放棄數據一致性,通過設置失效時間來自動失效,可能會出現查詢第一頁命中了緩存,查詢第二頁的時候未命中緩存,但此時數據已經發生了改變,導致第二頁查詢返回的和第一頁相同的結果。
以上,在分頁條件下這樣使用常規方案總感覺有諸多困擾,諸多麻煩,那是不是就應該放棄使用緩存?
基於SortedSet的分頁查詢緩存方案
首先想到的解決方法是使用@see ListOperations<K, V>不再根據分頁條件使用多個key,而是使用一個key,也不分頁將全部的數據緩存到redis中,然後按照分頁條件使用range(key,start,limit)獲取分頁的結果,這個會導致一個問題,當緩存失效時,並發的寫緩存會導致出現重復數據
所以想到通過使用set來處理並發時的重復數據,@see ZSetOperations<K, V>
代碼邏輯如下:

range(key,start,limit)按照分頁條件獲取緩存,命中則直接返回

緩存未命中,查詢(沒有分頁條件)資料庫或是調用(沒有分頁)底層介面

add(key,valueScoreMap<value,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查詢由原來的分頁查詢變成了不分頁查詢,緩存失效後,系統的處理能力較之前會有下降,尤其是對於大表.

⑶ 如何利用PHP訪問帶有密碼的Redis

1. 設置Redis密碼,以提供遠程登陸
打開redis.conf配置文件,找到requirepass,然後修改如下:
requirepass yourpassword

yourpassword就是redis驗證密碼,設置密碼以後發現可以登陸,但是無法執行命令了。
命令如下:
redis-cli -h 127.0.0.1 -p 6379//啟動redis客戶端,並連接伺服器
keys * //輸出伺服器中的所有key

報錯如下
(error) ERR operation not permitted
這時候你可以用授權命令進行授權,就不報錯了
命令如下:
auth youpassword

2. PHP訪問Redis

$redis = new Redis();
$conn = $redis->connect('localhost', 6379);
$auth = $redis->auth('20160601'); //設置密碼
var_mp($auth);
$redis->set('access_token', "123213213213213213");
$redis->set('expired_time', 1464344863);

var_mp($redis->get("access_token"));
var_mp($redis->get("expired_time"));

⑷ 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)){}。

⑸ php連接redis是什麼服務類型

要在PHP程序中使用Redis,首先需要確保Redis的PHP驅動程序和PHP安裝設置在機器上。可以查看PHP教程教你如何在機器上安裝PHP。現在,讓我們來看看一下如何設置Redis的PHP驅動程序。
需要從github上資料庫:https://github.com/nicolasff/phpredis下載phpredis。下載完成以後,將文件解壓縮到phpredis目錄。在Ubuntu上安裝這個擴展,可使用如下圖所示的命令來安裝。
cdphpredis
sudophpize
sudo./configure
sudomake
sudomakeinstall
現在,復制和粘貼「moles」文件夾的內容復制到PHP擴展目錄中,並在php.ini中添加以下幾行。
extension=redis.so
現在Redis和PHP安裝完成。
連接到Redis伺服器
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//
echo"Serverisrunning:".$redis->ping();
?>
當執行程序時,會產生下面的結果:
Connectiontoserversucessfully
Serverisrunning:PONG
Redis的PHP字元串實例
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//setthedatainredisstring
$redis->set("tutorial-name","Redistutorial");
//Getthestoreddataandprintit
echo"Storedstringinredis::".$redis.get("tutorial-name");
?>
當執行程序時,會產生下面的結果:
Connectiontoserversucessfully
Storedstringinredis::Redistutorial
Redis的PHP列表示例
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//storedatainredislist
$redis->lpush("tutorial-list","Redis");
$redis->lpush("tutorial-list","Mongodb");
$redis->lpush("tutorial-list","Mysql");
//Getthestoreddataandprintit
$arList=$redis->lrange("tutorial-list",0,5);
echo"Storedstringinredis::"
print_r($arList);
?>
當執行程序時,會產生下面的結果:
Connectiontoserversucessfully
Storedstringinredis::
Redis
Mongodb
Mysql
Redis的PHP鍵例
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//Getthestoredkeysandprintit
$arList=$redis->keys("*");
echo"Storedkeysinredis::"
print_r($arList);
?>
當執行程序時,會產生下面的結果:
Connectiontoserversucessfully
Storedstringinredis::
tutorial-name
tutorial-list

⑹ php實現redis資料庫指定庫號遷移的方法

這篇文章主要介紹了php實現redis資料庫指定庫號遷移的方法,涉及對於redis資料庫的操作技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了php實現redis資料庫指定庫號遷移的方法,分享給大家供大家參考。具體如下:
redis普通的資料庫遷移,只能整個redis
save,或者利用主從,當然也可以安裝一個redis-mp,不過比較麻煩,這里提供一種php的腳本,實現指定庫號的遷移,其實也就是遍歷根據存儲類型,讀出來,插入新庫,效果是這樣:
代碼如下:
[root@localhost
~]#
php
1.php
1/407
101/407
201/407
301/407
401/407
PHP實例代碼如下:
代碼如下:
<?php
$from
=
'10.0.2.52:6379/7';
$to
=
'127.0.0.1:6379/7';
$from_redis
=
redis_init($from);
$to_redis
=
redis_init($to);
$keys
=
$from_redis->keys('*');
$count
=
0;
$total
=
count($keys);
foreach($keys
as
$key){
if(++$count
%
100
==
1){
echo
"$count/$totaln";
}
$type
=
$from_redis->type($key);
switch($type){
case
Redis::REDIS_STRING:
$val
=
$from_redis->get($key);
$to_redis->set($key,
$val);
break;
case
Redis::REDIS_LIST:
$list
=
$from_redis->lRange($key,
0,
-1);
foreach($list
as
$val){
$to_redis->rPush($key,
$val);
}
break;
case
Redis::REDIS_HASH:
$hash
=
$from_redis->hGetAll($key);
$to_redis->hMSet($key,
$hash);
break;
case
Redis::REDIS_ZSET:
$zset
=
$from_redis->zRange($key,
0,
-1,
true);
foreach($zset
as
$val=>$score){
$to_redis->zAdd($key,
$score,
$val);
}
break;
}
}
function
redis_init($conf){
$redis
=
new
Redis();
preg_match('/^([^:]+)(:[0-9]+)?/(.+)?/',
$conf,
$ms);
$host
=
$ms[1];
$port
=
trim($ms[2],
':');
$db
=
$ms[3];
$redis->connect($host,
$port);
$redis->select($db);
return
$redis;
}
?>

希望本文所述對大家的php程序設計有所幫助。

⑺ php redis如何使用

開始在
PHP
中使用
Redis
前,要確保已經安裝了
redis
服務及
PHP
redis
驅動,且你的機器上能正常使用
PHP。
PHP安裝redis擴展
/usr/local/php/bin/phpize
#php安裝後的路徑
./configure
--with-php-config=/usr/local/php/bin/php-config
make
&&
make
install
修改php.ini文件
vi
/usr/local/php/lib/php.ini
增加如下內容:
extension_dir
=
"/usr/local/php/lib/php/extensions/no-debug-zts-20090626"
extension=redis.so
安裝完成後重啟php-fpm

apache。查看phpinfo信息,就能看到redis擴展。
連接到
redis
服務
<?php
//連接本地的
Redis
服務
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//查看服務是否運行
echo
"Server
is
running:
"
.
$redis->ping();
?>
執行腳本,輸出結果為:
Connection
to
server
sucessfully
Server
is
running:
PONG
Redis
PHP
String(字元串)
實例
<?php
//連接本地的
Redis
服務
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//設置
redis
字元串數據
$redis->set("tutorial-name",
"Redis
tutorial");
//
獲取存儲的數據並輸出
echo
"Stored
string
in
redis::
"
.
jedis.get("tutorial-name");
?>
執行腳本,輸出結果為:
Connection
to
server
sucessfully
Stored
string
in
redis::
Redis
tutorial
Redis
PHP
List(列表)
實例
<?php
//連接本地的
Redis
服務
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//存儲數據到列表中
$redis->lpush("tutorial-list",
"Redis");
$redis->lpush("tutorial-list",
"Mongodb");
$redis->lpush("tutorial-list",
"Mysql");
//
獲取存儲的數據並輸出
$arList
=
$redis->lrange("tutorial-list",
0
,5);
echo
"Stored
string
in
redis::
"
print_r($arList);
?>
執行腳本,輸出結果為:
Connection
to
server
sucessfully
Stored
string
in
redis::
Redis
Mongodb
Mysql
Redis
PHP
Keys
實例
<?php
//連接本地的
Redis
服務
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//
獲取數據並輸出
$arList
=
$redis->keys("*");
echo
"Stored
keys
in
redis::
"
print_r($arList);
?>
執行腳本,輸出結果為:
Connection
to
server
sucessfully
Stored
string
in
redis::
tutorial-name
tutorial-list

⑻ php redis有沒有辦法獲取所有redis列表

首先需要定時清理的是不是可以設置下有效時間呢,接著你說的獲取redis全部key*是想在php中操作么,那麼建議

$redis->keys('*');
這樣解決就可以了,簡單粗暴,個人建議還是去後盾網去經常看看教學視頻學習學習吧

⑼ php怎麼查看redis的key

首先開啟redis服務:

  1. 打開cmd命令窗口,將根目錄切換至redis根目錄;

  2. 開啟redis服務:輸入命令:redis-server.exe redis.conf 然後回車。

開啟成功後,此窗口不要關閉,另打開一個cmd窗口,連接客戶端:

1.打開cmd命令窗口,將根目錄切換至redis根目錄;

2.輸入連接命令:redis-cli.exe -h 127.0.0.1 -p 6379 然後回車

3.輸入key的查看命令:keys *

⑽ redis 管理key

1.以前做redis時,非同步這個測試,我沒做過,但如果都是同一個KEY,會有影響。
2.我記得當時保存的內容是保存到磁碟中了,所以超時以後,再取這個key還是有的。

這個主要是看你的實現。

你說的

第二次我更改redis的timeout時間 這個key的失效時間會不會為此而變動

這一句沒有理解。

我記得這個時間是在啟動時就設置好了,

閱讀全文

與rediskeysphp相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163