1. 程式人生 > >Redis入門基礎詳解

Redis入門基礎詳解

val nlp 安裝ruby led 服務 後臺運行 參數 migrating install

Redis 簡介
Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。
Redis 與其他 key - value 緩存產品有以下三個特點:
Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
Redis支持數據的備份,即master-slave模式的數據備份;也可用作傳遞的消息隊列服務器使用。


1.安裝redis
2.redis集群

1.安裝redis

環境準備:

centos 7.2
redis-3.2.12.tar

安裝方式編譯安裝

cd /data

tar xzf redis-3.2.12.tar.gz

cd redis-3.2.12

yum -y install gcc-c++ tcl gcc

make

可能會出現的問題:

若出現如下提示,則將make改為make MALLOC=libc,推測是因為編譯庫的問題

[root@localhost redis-3.2.12]# make
cd src && make allmake[1]: Entering directory /root/redis-2.8.17/src‘ CC adlist.o<br/>In file included from adlist.c:34:<br/>zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory<br/>zmalloc.h:55:2: error: #error "Newer version of jemalloc required"make[1]: *** [adlist.o] Error 1make[1]: Leaving directory

/root/redis-2.8.17/src‘make: *** [all] Error 2

make完後 redis目錄下會出現編譯後的redis服務程序redis-server,還有用於測試的客戶端程序redis-cli,兩個程序位於安裝目錄 src 目錄下:

下面啟動redis服務

cd src
./redis-server
註意這種方式啟動redis 使用的是默認配置。也可以通過啟動參數告訴redis使用指定配置文件使用下面命令啟動。

redis.conf?是一個默認的配置文件。我們可以根據需要使用自己的配置文件。

在配置redis.conf中 如果需要在redis後臺運行,把該項daemonize改為yes

2.redis集群

簡介:redis集群搭建一共是6個節點 3主3從 手動新建6個配置文件一致 統一使用6300 6301 端口 每臺機器上2個節點 (我使用的是2臺機器搭建集群 也可以三臺每臺兩個節點 或者一臺上6節點)

cd /data
mkdir cluster
cd cluster
mkdir 6300 6301
cd 6300
touch redis-6300.conf

可根據自己需要對配置文件進行修改 下面是我的配置:

daemonize yes
port 6300
tcp-backlog 511
timeout 60
tcp-keepalive 0
loglevel notice
maxmemory 10gb
databases 16
dir "/home/data/cluster/6300"

slave-serve-stale-data yes

logfile "/home/data/cluster/6300/redis_6300.log"
#slave只讀
slave-read-only yes
#not use default
repl-disable-tcp-nodelay yes
slave-priority 100
#打開aof持久化
appendonly yes
#每秒一次aof寫
appendfsync everysec
#關閉在aof rewrite的時候對新的寫操作進行fsync
no-appendfsync-on-rewrite yes
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
#打開redis集群
cluster-enabled yes
cluster-config-file "/home/data/cluster/6300/nodes-6300.conf"
#節點互連超時的閥值(單位毫秒)
cluster-node-timeout 15000
#一個主節點在擁有多少個好的從節點的時候就要割讓一個從節點出來給其他沒有從節點或者從節點掛掉的主節點
cluster-migration-barrier 1
#如果某一些key space沒有被集群中任何節點覆蓋,最常見的就是一個node掛掉,集群將停止接受寫入
cluster-require-full-coverage no
#部署在同一機器的redis實例,把auto-aof-rewrite搓開,防止瞬間fork所有redis進程做rewrite,占用大量內存
auto-aof-rewrite-percentage 80
slowlog-log-slower-than 10000
slowlog-max-len 128
notify-keyspace-events "gxE"
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
#Generated by CONFIG REWRITE
maxclients 30000
bind 172.168.55.23

配置文件創建完成後復制到每個節點上 ip 和 端口註意修改

編輯完配置文件後逐一啟動各個節點的redis

進入到 redis目錄下的src

運行 ./redis-server +節點配置文件的路徑

運行之後 在每臺機器上查看運行狀態 (請提前關閉防火墻和selinux)

或者防火墻開啟6300 6300 端口
firewall-cmd?--zone=public?--add-port=6300/tcp?--permanent

firewall-cmd?--zone=public?--add-port=6301/tcp?--permanent

查看是否啟動成功

ps -ef | grep redis

netstat -tnlp | grep redis #可以看到redis監聽端口

lsof -i:6300 查看6300 6301 是否存在

開始創建集群

前面已經準備好了搭建集群的redis節點,接下來我們要把這些節點都串連起來搭建集群。官方提供了一個工具:redis-trib.rb ,它是用ruby寫的一個程序,所以我們還得安裝ruby.

再用 gem 這個命令來安裝 redis接口? ? gem是ruby的一個工具包.

通過yum安裝

yum install centos-release-scl-rh 

yum install rh-ruby24

scl enable rh-ruby24 bash //必須執行

ruby -v //查看安裝版本

註意:想要開機自動啟動ruby 需要在家目錄下配置環境變量

vim ~/.bash_profile

PATH=/opt/rh/rh-ruby24/root/usr/bin/:$PATH:$HOME/

export LD_LIBRARY_PATH=/opt/rh/rh-ruby24/root/usr/lib64:${LD_LIBRARY_PATH}

下一步
gem install redis

進到redis的src目錄下

創建集群

./redis-trib.rb create --replicas 1 172.16.54.23:6300 172.16.54.24:6300 172.16.54.25:6300 172.16.54.23:6301 172.16.54.24:6301 172.16.54.25:6301

中間會有提示 輸入yes即可

集群搭建後可以通過

查看cluster狀態 redis-trib.rb check 172.16.54.23:6300
查看cluster信息 redis-trib.rb info 172.16.54.23:6300

測試集群是否搭建成功

進入到redis界面

輸入 set hello world
Ok

去任意一臺從機

執行
./redis-cli -c -p 6300 -h 172.16.54.24
輸入
get hello
出現
world
集群搭建成功

還有一種方法 redis 集群如果出現一臺master宕機 會自動推選出一臺新的主節點
Kill -9 **** 殺掉其中的一臺主節點的進程

通過 redis-trib.rb check 172.16.54.23:6300

查看是否有新的master生成

redis cluster命令行

//集群(cluster)??
CLUSTER?INFO? 打印集群的信息??
CLUSTER?NODES? 列出集群當前已知的所有節點(node),以及這些節點的相關信息。???
??
//節點(node)??
CLUSTER?MEET?<ip>?<port>?將?ip?和?port? 所指定的節點添加到集群當中,讓它成為集群的一份子。??
CLUSTER?FORGET?<node_id>? 從集群中移除?node_id?指定的節點。??
CLUSTER?REPLICATE?<node_id>? 將當前節點設置為?node_id?指定的節點的從節點。??
CLUSTER?SAVECONFIG? 將節點的配置文件保存到硬盤裏面。???
??
//槽(slot)??
CLUSTER?ADDSLOTS?<slot>?[slot?...]? 將一個或多個槽(slot)指派(assign)給當前節點。??
CLUSTER?DELSLOTS?<slot>?[slot?...]? 移除一個或多個槽對當前節點的指派。??
CLUSTER?FLUSHSLOTS? 移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。??
CLUSTER?SETSLOT?<slot>?NODE?<node_id>? 將槽?slot?指派給?node_id?指定的節點,如果槽已經指派給另一個節點,那麽先讓另一個節點刪除該槽>,然後再進行指派。??
CLUSTER?SETSLOT?<slot>?MIGRATING?<node_id>? 將本節點的槽?slot?遷移到?node_id?指定的節點中。??
CLUSTER?SETSLOT?<slot>?IMPORTING?<node_id>? 從?node_id?指定的節點中導入槽?slot?到本節點。??
CLUSTER?SETSLOT?<slot>?STABLE?取消對槽?slot?的導入(import)或者遷移(migrate)。???
??
//鍵?(key)??
CLUSTER?KEYSLOT?<key>? 計算鍵?key?應該被放置在哪個槽上。??
CLUSTER?COUNTKEYSINSLOT?<slot>? 返回槽?slot?目前包含的鍵值對數量。??
CLUSTER?GETKEYSINSLOT?<slot>?<count>?返回?count?個?slot?槽中的鍵。
CLUSTER?RESET?[HARD|SOFT] 集群重置

這些命令都是集群獨有的,執行命令得通過redis-cli登錄

./redis-cli -c -p 6300 -h 172.16.54.23???//登錄??

不同的機器環境會出現不同的問題 下面是我出現過的問題 可用做參考

技術分享圖片

這個問題解決可以有兩種方法解決:
1.修改配置文件redis.conf的權限參數設置為no,就是不需要權限驗證

protected-mode no

2.修改配置文件redis.conf的權限設置安全密碼(密碼自定義設置)

requirepass “111111”?? #權限密碼

我這裏是第一解決方法,不需要權限,先kill啟動的6個redis進程,在修改配置文件。在繼續進行集群搭建

技術分享圖片

解決方法:相關文件都在src

1.停止所有redis進程,將需要新增的節點下aof、rdb等本地備份文件刪除;
2.同時將新Node的集群配置文件刪除,即:刪除你redis.conf裏面cluster-config-file所在的文件,一般為nodes.conf;
3)、再次添加新節點如果還是報錯,則登錄新Node,./redis-cli –p 端口 對數據庫進行清除:
flushdb????? #清空當前數據庫
啟動redis進程重新執行集群命令

redis基礎講解到此結束 謝謝 有問題可以私信我 我會第一時間回復

Redis入門基礎詳解