Ⅰ 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程序設計有所幫助。
Ⅱ 怎麼安裝redis PHP擴展,windows下
1、首先到相應網站下載redis:
下載完成後解壓到任意盤符如:D:/redis
裡麵包括:如圖所示。
redis-server.exe:服務程序
redis-check-mp.exe:本地資料庫檢查
redis-check-aof.exe:更新日誌檢查
redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢 (類似於 Apache 的ab 工具).
當然還需要一個:redis.conf(具體內容網上隨便搜都會有)
8、PHP代碼測試
$redis = new Redis();
$redis->connect("192.168.138.2","6379"); //php客戶端設置的ip及埠
//存儲一個 值
$redis->set("say","Hello World");
echo $redis->get("say"); //應輸出Hello World
//存儲多個值
$array = array('first_key'=>'first_val',
'second_key'=>'second_val',
'third_key'=>'third_val');
$array_get = array('first_key','second_key','third_key');
$redis->mset($array);
var_mp($redis->mget($array_get));
Ⅲ windows 7 php怎麼通過redis擴展使用redis
PHP 7安裝Redis擴展
1、php操作第一步就是要安裝對應的擴展。在Windows環境下則是對應的.dll文件。Windows環境下由於編譯環境不同,對應擴展在選擇的時候需要注意當前php的先關信息。可以通過phpinfo()查看。如果可以看到對應的環境,這在選擇擴展的時候有用
2、選擇對應PHP環境擴展
通過以上圖我們可以看到「VC14」和「ts」這樣的字樣,如果不明白的同學在找對應擴展的時候也一樣要找到這樣的字樣。
3、安裝PHP 7擴展
下載php_redis-20160319-ts-vc14-x64.zip之後解壓,將解壓後的php_redis.dll文件放到php\ext目錄下。然後在php.ini末尾添加extension=php_redis.dll。重啟Apache服務。再次通過phpinfo()查看,如圖表示安裝成功
測試例子
1、擴展安裝成功之後需要驗證下是否可以用。web伺服器目錄下創建文件輸入下面內容:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->set('test','hello redis');
echo $redis->get('test');
?>
2、然後在網頁上訪問,如果有hello redis輸入則表示擴展安裝成功。
Ⅳ Redis底層數據結構解密
一:摘要概述
很多 redis 的使用者都可以清晰明白的道出Redis中常用的對象如string、list、hash、set、zset,一些場景比較豐富的使用者可能會說布隆過濾器、geo、Hash等。但是對於這些對象底層實現的數據結構卻是知之甚少,將會詳細闡述redis中的底層數據結構。為了彌補大家的創傷,今天分享Redis底層數據結構內容。
二:SDS
string作為redis中常用對象之一,普遍用於用戶信息緩存等場景。當string對象中encoding編碼為embstr或raw時都是採用sds作為其底層實現
2.1 SDS結構
源碼文件位於redis安裝目錄src下的sds.h,sds聲明了五種頭部類型,分別為sdshdr5、sdshdr8、sdshdr16、sdshdr32、sdshdr64。根據字元串長度創建不同頭部的sds實例
struct __attribute__ ((__packed__)) sdshdr8 {
uint8_t len;
uint8_t alloc;
unsigned char flags;
char buf[];
};
屬性名稱作用含義
len字元串長度
alloc預分配空間大小
flags低三位用於表示sds類型,可以查看sds.h文件76-82行定義
buf[]存儲字元串用數組
2.2 SDS與C字元串區別
區別描述
長度計算 c中的字元串長度計算需要數組遍歷,但是redis中的sds自身維護了len屬性。所以O(1)時間復雜度即可
緩沖區溢出c中字元串更改如果未提前做好內存分配則會內存溢出,但是sds則會根據alloc與len計算預留內存是否足夠分配重新申請內存
動態擴展 緩沖區溢出已經闡述這個概念,sds的內存空間會在字元串內容變更時自動擴展計算。策略為當字元換小於1M時*2翻倍,大於1M時每次擴容1M
惰性釋放 與空間預分配相似操作的還有內存惰性釋放,即字元串刪除某些內容後所佔用的內存空間並不會立即釋放,後續字元串變更擴展就無需再申請內存
二:ZipList
ziplist可以說把redis對於內存的極致操作體現的淋漓盡致,鏈表除了節點值之外還需要維護前後節點兩個指針,並且還會造成內存碎片。壓縮列表緊湊的內存布局,所有節點都維護在整塊內存中處理
2.1 ZipList結構
屬性名稱作用含義
zlbytes列表健佔用內存的總位元組數,在對列表健內存重分配或者是計算zlend的時候使用
zltail 指向壓縮列表起始地址的指針
zllen 壓縮列表的節點數量
entry壓縮列表保存的節點數據
zlend壓縮列表的尾節點
2.2 Entry節點結構
屬性名稱作用含義
previous_entry_length 位元組為單位記錄上一個節點的長度,如果上一個位元組長度小於254佔用1位元組。大於254佔用5位元組,第一個位元組設置為OxFE(十進制254),後面四個位元組儲存長度
encoding 記錄content記錄的數據類型以及長度。長度一、二、五位元組,值的最高位為00、01、10表示類型為位元組數組,長度使用除去最高位的其它位記錄。11開頭表示儲存整數,除去最高位其他位置表示content數據長度
content 記錄壓縮列表記錄的數據