Redis基本命令及集羣搭建

  1. 使用redis有哪些好處?

(1) 速度快,因爲數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)
(2) 支持豐富數據類型,支持string,list,set,sorted set,hash
(3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行
(4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

  1. redis相比memcached有哪些優勢?
    (1) memcached所有的值均是簡單的字符串,redis作爲其替代者,支持更爲豐富的數據類型
    (2) redis的速度比memcached快很多
    (3) redis可以持久化其數據

  2. redis常見性能問題和解決方案:

(1) Master最好不要做任何持久化工作,如RDB內存快照和AOF日誌文件
(2) 如果數據比較重要,某個Slave開啓AOF備份數據,策略設置爲每秒同步一次
(3) 爲了主從複製的速度和連接的穩定性,Master和Slave最好在同一個局域網內
(4) 儘量避免在壓力很大的主庫上增加從庫
(5) 主從複製不要用圖狀結構,用單向鏈表結構更爲穩定,即:Master <- Slave1 <- Slave2 <- Slave3...

這樣的結構方便解決單點故障問題,實現Slave對Master的替換。如果Master掛了,可以立刻啓用Slave1做Master,其他不變。

4.redis集羣的工作原理
1主多從+哨兵模式

安裝:參考文檔 菜鳥教程:http://www.runoob.com/redis/redis-data-types.html
依賴環境:
rpm -qa gcc 查找系統是否安裝gcc編譯環境,無任何顯示錶示沒有安裝
yum -y install gcc gcc-c++ 安裝gcc編譯環境
下載地址:http://redis.io /download,下載最新文檔版本。
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
解壓進入redis-4.0.9/目錄下
make make install
./redis-server 啓動redis

redis-cli 客戶端
在遠程服務上執行命令
如果需要在遠程 redis 服務上執行命令,同樣我們使用的也是 redis-cli 命令。
語法
$ redis-cli -h host -p port -a password
127.0.0.1:6379> ping
PONG #用於檢測redis服務是否開啓
CONFIG GET * 獲取東西

集羣:測試環境虛擬機少的原因只用了一臺基於不同端口實現
安裝:安裝ruby要求版本在2.0以上,直接在官網下載:
http://www.ruby-lang.org/en/ 安裝完自帶一個gem接口
mkdir -p redis-master/7001 7002 7003
mkdir -p redis-slave/7004 7005 7006
cd ruby解壓縮的包
#編譯安裝:
./configure --prefix=/usr/local/ruby
make && make install
#直接放在/usr/bin/下可以直接使用命令
cp ruby gem /usr/bin
#使用gem接口安裝
gem install redis
cd redis-4.0.9/src/
cp redis-trib-rb /usr/bin
#查看配置文件
grep -Pv "(^$|#)" /redis-master/7001/7001.conf
bind 0.0.0.0
protected-mode no
port 7001
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_7001.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump_7001.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
cluster-migration-barrier 1
cluster-require-full-coverage no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 100
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
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

把配置文件複製給其他的主從
sed -ri 's/7001/7002/' 7002.conf

添加集羣主:
redis-trib.rb create 10.18.42.71:7001 10.18.42.71:7002 10.18.42.71:7003
從指定主:
redis-trib.rb add-node --slave --master-id dd43785e0478031a6471348aaed51e5cbf5e1836 10.18.42.71:7004 10.18.42.71:7001
redis-trib.rb add-node --slave --master-id dd43785e0478031a6471348aaed51e5cbf5e1836 10.18.42.71:7006 10.18.42.71:7003
redis-trib.rb add-node --slave --master-id feaae6f7077d37fdfa6b1b64b4fc5edef96275c2 10.18.42.71:7005 10.18.42.71:7002

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

172.31.24.139:6300 (42050de2...) -> 0 keys | 5461 slots | 1 slaves.

172.31.24.140:6300 (b233ca19...) -> 0 keys | 5462 slots | 1 slaves.

172.31.24.141:6300 (9681bbeb...) -> 0 keys | 5461 slots | 1 slaves.

Redis Cluster中的節點分爲兩種:Master節點和Slave節點,一個Master節點可以擁有若干個Slave節點,
Master節點上的數據通過異步方式與Slave節點實現數據同步,當Master節點因爲某種原因退出集羣后,
Redis Cluster會自動從該Master節點的Slave節點中選擇出一個作爲新的Master節點。
因此,redis-trib.rb工具的create子命令提供了--args參數來指定集羣中的Master節點擁有幾個Slave節點,
譬如使用6個redis實例構建集羣且--args參數值爲1,那麼整個集羣就包含三個Master節點和三個Slave節點,每個Master節點都有一個Slave節點

客戶端連接操作
redis-cli -h redis02-jp -p 6300
CLUSTER INFO #查看cluster信息
CLUSTER NODES #查看各節點的哈希槽和儲存節點

redis.conf 的配置信息

  • daemonize 如果需要在後臺運行,把該項改爲yes redis-server ../redis.conf 指定配置文件重啓
  • pidfile 配置多個pid的地址 默認在/var/run/redis.pid
  • bind 綁定ip,設置後只接受來自該ip的請求
  • port 監聽端口,默認是6379
  • loglevel 分爲4個等級:debug verbose notice warning
  • logfile 用於配置log文件地址
  • databases 設置數據庫個數,默認使用的數據庫爲0
  • save 設置redis進行數據庫鏡像的頻率。
  • rdbcompression 在進行鏡像備份時,是否進行壓縮
  • dbfilename 鏡像備份文件的文件名
  • Dir 數據庫鏡像備份的文件放置路徑
  • Slaveof 設置數據庫爲其他數據庫的從數據庫
  • Masterauth 主數據庫連接需要的密碼驗證
  • Requriepass 設置 登陸時需要使用密碼
  • Maxclients 限制同時使用的客戶數量
  • Maxmemory 設置redis能夠使用的最大內存
  • Appendonly 開啓append only模式
  • Appendfsync 設置對appendonly.aof文件同步的頻率(對數據進行備份的第二種方式)
  • vm-enabled 是否開啓虛擬內存支持 (vm開頭的參數都是配置虛擬內存的)
  • vm-swap-file 設置虛擬內存的交換文件路徑
  • vm-max-memory 設置redis使用的最大物理內存大小
  • vm-page-size 設置虛擬內存的頁大小
  • vm-pages 設置交換文件的總的page數量
  • vm-max-threads 設置VM IO同時使用的線程數量
  • Glueoutputbuf 把小的輸出緩存存放在一起
  • hash-max-zipmap-entries 設置hash的臨界值
  • Activerehashing 重新hash
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章