1.程式碼示例
<?php
namespace extend\drive;
use \Redis;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 16-10-6
* Time: 下午2:27
*/
class RedisCache
{
protected static $_instance = null;
private $rCache;
const CACHE_KEY = 'redisDefaultKey2016';
/**
* 單例模式
* @author mmy
* @param $dbHost
* @param $port
* @return RedisCache|null
*/
public static function getInstance($dbHost, $port)
{
if(self::$_instance === null)
{
self::$_instance = new self($dbHost,$port);
}
var_dump(self::$_instance);
return self::$_instance;
}
/**
* 建構函式
* @author mmy
* @param string $host
* @param string $port
*/
public function __construct($host='127.0.0.1',$port='6379')
{
if($this->rCache)
{
return $this->rCache;
}
$this->rCache = new Redis();
$this->rCache->connect($host,$port);
}
/**
* 獲取key值
* @author mmy
* @param $key
* @return bool|string
*/
public function get($key)
{
$res = md5(static::CACHE_KEY.$key);
return $this->rCache->get($res);
}
/**
* 設定key值方法
* @author mmy
* @param $key
* @param $value
* @param int $timeout
* @return bool
*/
public function set($key,$value,$timeout=0)
{
$key = md5(static::CACHE_KEY.$key);
if($timeout===0)
{
$res = $this->rCache->set($key,$value);
}
else
{
$res = $this->rCache->set($key,$value,$timeout);
}
return $res;
}
/**
* 佇列插入值
* @author mmy
* @param $key
* @param $string
* @param int $limit
*/
public function push($key,$string,$limit = 0)
{
$key = md5(static::CACHE_KEY.$key);
$result = $this->rCache->lPush($key,$string);
//執行lTrim方法 保證佇列中只有$limit條資料
if($limit>1)
{
$result = $this->rCache->lTrim($key,0,$limit);// 0:從最先進的資料開始算,-1:從最後進的資料計算
}
return $result;
}
/**
* 獲取訊息列表內容
* @author mmy
* @param $key
* @return array
*/
public function range($key)
{
$key = md5(static::CACHE_KEY.$key);
return $this->rCache->lRange($key,0,-1);
}
}
2.檢測
$rest = $redis->push($message_data['userid'],$message_data['name']);
echo '-----------------------';
print_r( $redis->range($message_data['userid']));
echo $rest;
3.redis linux
1》Linux下安裝Reids
http://redis.io/download
wget http://download.redis.io/releases/redis-3.0.1.tar.gz 下載
tar -xzvf redis-3.0.1.tar.gz 解壓
cd redis-3.0.1 進入解壓目錄
make 編譯 安裝
make install
2》在bin下可執行的程式
redis-server:Redis伺服器
redis-cli:命令列客戶端
redis-benchmark:Redis的效能測試工具
redis-check-aof:AOF檔案修復工具
redis-check-dump:RDB檔案檢測工具
redis.conf是Redis的配置檔案
將配置檔案中daemonize yes 以守護程式的方式來使用
3》啟動和停止Redis
直接啟動
redis-server
redis-server /ect/redis.conf
停止Redis
shutdown
結束Redis的程式也可以
aof,rdb是兩種 Redis持久化的機制。用於crash(崩潰)後,redis的恢復。
aof:Append-only file
將“操作 + 資料”以格式化指令的方式追加到操作日誌檔案的尾部,在append操作返回後(已經寫入到檔案或
者即將寫入),才進行實際的資料變更,“日誌檔案”儲存了歷史所有的操作過程;當server需要資料恢復時,可以直接
replay此日誌檔案,即可還原所有的操作過程。AOF相對可靠,它和MySQL中bin.log、pache.log、zookeeper中txn-log簡直異曲同工。AOF檔案內容是字串,非常容易閱讀和解析。
rdb:
RDB預設開啟,redis.conf中的具體配置引數如下;
#dbfilename:持久化資料儲存在本地的檔案
dbfilename dump.rdb
#dir:持久化資料儲存在本地的路徑,如果是在/redis/redis-3.0.6/src下啟動的redis-cli,則資料會儲存在當前src目錄下
dir ./
##snapshot觸發的時機,save <seconds> <changes>
##如下為900秒後,至少有一個變更操作,才會snapshot
##對於此值的設定,需要謹慎,評估系統的變更操作密集程度
##可以通過“save “””來關閉snapshot功能
#save時間,以下分別表示更改了1個key時間隔900s進行持久化儲存;更改了10個key300s進行儲存;更改10000個
key60s進行儲存。
save 900 1
save 300 10
save 60 10000
##當snapshot時出現錯誤無法繼續時,是否阻塞客戶端“變更操作”,“錯誤”可能因為磁碟已滿/磁碟故障/OS級別異常
等
stop-writes-on-bgsave-error yes
##是否啟用rdb檔案壓縮,預設為“yes”,壓縮往往意味著“額外的cpu消耗”,同時也意味這較小的檔案尺寸以及較短
的網路傳輸時間
rdbcompression yes
客戶端使用命令進行持久化save儲存:
./redis-cli -h ip -p port save
./redis-cli -h ip -p port bgsave
aof優缺點:
優點:
可以保持更高的資料完整性,如果設定追加file的時間是1s,如果redis發生故障,最多會丟失1s的資料;且如果日誌寫入不完整支援redis-check-aof來進行日誌修復;AOF檔案沒被rewrite之前(檔案過大時會對命令進行合併重寫),可以刪除其中的某些命令(比如誤操作的flushall)。
缺點:
AOF檔案比RDB檔案大,且恢復速度慢。
rdb優缺點:
RDB是在某個時間點將資料寫入一個臨時檔案,持久化結束後,用這個臨時檔案替換上次持久化的檔案,達到資料恢復。
優點:
使用單獨子程式來進行持久化,主程式不會進行任何IO操作,保證了redis的高效能
缺點:
RDB是間隔一段時間進行持久化,如果持久化之間redis發生故障,會發生資料丟失。所以這種方式更適合資料要求不嚴謹的時候
1) AOF更加安全,可以將資料更加及時的同步到檔案中,但是AOF需要較多的磁碟IO開支,AOF檔案尺寸較大,檔案內
容恢復數度相對較慢。
2) snapshot,安全性較差,它是“正常時期”資料備份以及master-slave資料同步的最佳手段,檔案尺寸較小,恢復
數度較快。
redis 其他埠開放服務
/etc/init.d/redis-server-------------redis的可執行程式
/etc/redis/redis.conf----------------redis的配置檔案
/usr/bin/redis-server---------------redis的自啟動檔案
如果是單例項執行redis的話,那麼到這裡就不需要關心了,如果你想執行多個redis的例項,那麼就需要對redis檔案進行操作。
首先我們要知道redis一個例項就是一個節點,每個節點分配一個埠號,每個節點對應一個redis.conf配置檔案。
redis預設配置的埠號是6379,假設現在要多配置一個6380,我們可以直接複製redis.conf命名為redis6380.conf,並且編輯配置檔案
cp /etc/redis/redis.conf /etc/redis/redis6380.conf
vi /etc/redis/redis6380.conf
需要修改幾個引數
pidfile /var/run/redis/redis6380-server.pid
port 6380
logfile /var/log/redis/redis6380-server.log
dbfilename dump6380.rdb
然後儲存,直接啟動這個配置檔案就行了
redis-server /etc/redis/redis6380.conf
我們可以檢視下程式
ps auxf | grep redis-server
殺掉程式
kill -9 +程式號