Redis簡明教程

redis是什麼:php

Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.mysql

redis是開源,BSD許可,高級的key-value存儲系統.git

能夠用來存儲字符串,哈希結構,鏈表,集合,所以,經常使用來提供數據結構服務.github

 

redis和memcached相比,的獨特之處:redis

1: redis能夠用來作存儲(storge), 而memccached是用來作緩存(cache)sql

  這個特色主要由於其有」持久化」的功能.數據庫

2: 存儲的數據有」結構」,對於memcached來講,存儲的數據,只有1種類型--」字符串」,緩存

  而redis則能夠存儲字符串,鏈表,哈希結構,集合,有序集合.安全

 

Redis下載安裝:服務器

下載源碼包:wget http://download.redis.io/releases/redis-3.2.8.tar.gz

解壓:tar zxvf redis-3.2.8.tar.gz

不用config,直接Make

安裝到指定目錄:好比/usr/local/redis

make  PREFIX=/usr/local/redis install

注: PREFIX要大寫

 

make install以後,獲得以下幾個文件

redis-benchmark  性能測試工具

redis-check-aof  日誌文件檢測工(好比斷電形成日誌損壞,能夠檢測並修復)

redis-check-dump  快照文件檢測工具,效果類上

redis-cli  客戶端

redis-server 服務端

 

複製配置文件

Cp /usr/local/src/redis-3.2.8/redis.conf  /usr/local/redis

 

啓動與鏈接

/usr/local/redis/bin/redis-server  ./usr/local/redis.conf

 

客戶端鏈接redis:

鏈接: 用redis-cli

#/usr/local/redis/bin/redis-cli [-h localhost -p 6379 ]  指定主機或端口

 

讓redis之後臺進程的形式運行

編輯conf配置文件,修改以下內容;

daemonize yes

 

Redis事物處理:

Redis與 mysql事務的對比

 

 

Mysql

Redis

開啓

start transaction

multi

語句

普通sql

普通命令

失敗

rollback 回滾

discard 取消

成功

commit

exec

 

注: rollback與discard 的區別

若是已經成功執行了2條語句, 第3條語句出錯.

Rollback後,前2條的語句影響消失.

Discard只是結束本次事務,前2條語句形成的影響仍然還在

 

Redis的事務中,啓用的是樂觀鎖,只負責監測key沒有被改動.

具體的命令----  watch命令

Watch可監視多個變量,若是其中之一發生改變,則事物回滾

若是exec返回nil,說明監視的ticket已經改變了,事務就取消了.

unwatch 取消全部watch監聽

 

Redis持久化配置

 

Redis的持久化有2種方式   1快照  2是日誌

 

Rdb快照的配置選項

 

save 900 1      // 900內,有1條寫入,則產生快照

save 300 1000   // 若是300秒內有1000次寫入,則產生快照

save 60 10000  // 若是60秒內有10000次寫入,則產生快照

(這3個選項都屏蔽,則rdb禁用)

 

stop-writes-on-bgsave-error yes  // 後臺備份進程出錯時,主進程停不中止寫入?

rdbcompression yes    // 導出的rdb文件是否壓縮

Rdbchecksum   yes //  導入rbd恢復時數據時,要不要檢驗rdb的完整性

dbfilename dump.rdb  //導出來的rdb文件名

dir ./  //rdb的放置路徑

 

 

Aof 的配置

appendonly no # 是否打開 aof日誌功能

appendfsync always   # 每1個命令,都當即同步到aof. 安全,速度慢

appendfsync everysec # 折衷方案,每秒寫1次

appendfsync no      # 寫入工做交給操做系統,由操做系統判斷緩衝區大小,統一寫入到aof. 同步頻率低,速度快,

no-appendfsync-on-rewrite  yes: # 正在導出rdb快照的過程當中,要不要中止同步aof

auto-aof-rewrite-percentage 100 #aof文件大小比起上次重寫時的大小,增加率100%時,重寫

auto-aof-rewrite-min-size 64mb #aof文件,至少超過64M時,重寫

 

注意:redis優先使用aof恢復數據

恢復時rdb比aof快,由於其是數據的內存映射,直接載入到內存,而aof是命令,須要逐條執行

 

Redis服務端經常使用命令:

time  ,顯示服務器時間 , 時間戳(秒), 微秒數

dbsize  // 當前數據庫的key的數量

select 2 切換數據庫

bgrewriteaof 後臺進程重寫AOF

bgsave      後臺保存rdb快照

save         保存rdb快照

lastsave     上次保存時間

 

Flushall  清空全部庫全部鍵

Flushdb  清空當前庫全部鍵

Shutdown [save/nosave]  關閉redis服務

若是不當心運行了flushall, 當即 shutdown nosave ,關閉服務器

而後 手工編輯aof文件, 去掉文件中的 「flushall 」相關行, 而後開啓服務器,就能夠導入回原來數據.

Slowlog 顯示慢查詢

由slowlog-log-slower-than 10000 ,來指定,(單位是微秒)

slowlog-max-len 128 ,來作限制服務器儲存多少條慢查詢的記錄

 

Redis運維時須要注意的參數

1: 內存

# Memory

used_memory:859192 數據結構的空間

used_memory_rss:7634944 實佔空間

mem_fragmentation_ratio:8.89 前2者的比例,1.N爲佳,若是此值過大,說明redis的內存的碎片化嚴重,能夠導出再導入一次.

2: 主從複製

# Replication

role:slave

master_host:192.168.1.128

master_port:6379

master_link_status:up

 

3:持久化

# Persistence

rdb_changes_since_last_save:0

rdb_last_save_time:1375224063

 

4: fork耗時

#Status

latest_fork_usec:936  上次導出rdb快照,持久化花費微秒

注意: 若是某實例有10G內容,導出須要2分鐘,

每分鐘寫入10000次,致使不斷的rdb導出,磁盤始處於高IO狀態.

 

 

5: 慢日誌

config get/set slowlog-log-slower-than

CONFIG get/SET slowlog-max-len

slowlog get N 獲取慢日誌

 

運行時更改master-slave

修改一臺slave(設爲A)爲new master

1) 命令該服務不作其餘redis服務的slave

   命令: slaveof no one

2) 修改其slave-read-only爲no

 

其餘的slave再指向new master A

1) 命令該服務爲new master A的slave

   命令格式 slaveof IP port

 

Slaveof master-Host port  , 把當前實例設爲master的slave

主從配置:slaveof  <masterip>  <masterport>

同時修改port

 

監控工具 sentinel

Sentinel不斷與master通訊,獲取master的slave信息.

監聽master與slave的狀態

若是某slave失效,直接通知master去除該slave.

若是master失效,,是按照slave優先級(可配置), 選取1個slave作 new master,把其餘slave--> new master

 

疑問: sentinel與master通訊,若是某次由於master IO操做頻繁,致使超時,此時,認爲master失效,很武斷.

解決: sentnel容許多個實例看守1個master, 當N臺(N可設置)sentinel都認爲master失效,才正式失效.

 

Sentinel選項配置

port 26379 # 端口

sentinel monitor mymaster 127.0.0.1 6379 2 ,給主機起的名字(不重便可),當2個sentinel實例都認爲master失效時,正式失效

sentinel down-after-milliseconds mymaster 30000  多少毫秒後鏈接不到master認爲斷開

sentinel can-failover mymaster yes #是否容許sentinel修改slave->master. 如爲no,則只能監控,無權修改./

sentinel parallel-syncs mymaster 1 , 一次性修改幾個slave指向新的new master.

sentinel client-reconfig-script mymaster /var/redis/reconfig.sh ,# 在從新配置new master,new slave過程,能夠觸發的腳本

 

php-redis擴展編譯

 

1: 到pecl.php.net  搜索redis

2: 下載stable版(穩定版)擴展

3: 解壓,

4: 執行/php/path/bin/phpize (做用是檢測PHP的內核版本,併爲擴展生成相應的編譯配置)

5: configure --with-php-config=/php/path/bin/php-config

6: make && make install

 

引入編譯出的redis.so插件

1: 編輯php.ini

2: 添加extension=/alidata/server/php/lib/php/extensions/no-debug-non-zts-20100525/redis.so

redis插件的使用

https://github.com/phpredis/phpredis

// get instance

$redis = new Redis();

 

// connect to redis server

$redis->open('localhost',6380);

$redis->set('user:userid:9:username','wangwu');

相關文章
相關標籤/搜索