redis是內存型數據庫html
with open() 默認close關閉文件句柄python
word 工具 ,沒保存前,數據都放在內存裏,保存後,持久化到磁盤上,永久存在mysql
mysql是文件型數據庫,默認持久化到磁盤上nginx
redis安裝學習web
1.yum安裝 ,最簡單,配置yum源,yum倉庫才能夠 2.源碼編譯安裝, 指定安裝路徑,自定製第三方擴展模塊功能(nginx http web 80, 443 https, openssl功能擴展 ) 3.rpm軟件包手動安裝,很垃圾,手動解決依賴關係,不適用
編譯安裝redis,三部曲redis
解決編譯安裝所需的依賴環境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
1.下載源代碼包 wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解壓縮 tar -zxvf redis-4.0.10.tar.gz 3. ./configure --prefix=/opt/redis/ #釋放makefile,告訴gcc編譯器,redis的安裝路徑 若是默認沒有configure腳本,出現了makefile,直接make&&make install 安裝便可 4.編譯且安裝 make && make install
編譯完成後,便可使用redis
啓動redis服務端sql
redis-server 直接執行,便可啓動服務端,可是,這樣很不安全,容易被攻擊數據庫
指定配置文件,安全的啓動redis服務端vim
redis的默認配置文件是 redis.conf瀏覽器
#過濾出配置文件的有益信息(去除空白行和註釋行) grep -v "^#" redis.conf |grep -v "^$" #將redis.conf文件內容輸出到s21redis.conf文件中: grep -v "^#" redis.conf |grep -v "^$" >s21redis.conf
指定配置文件啓動
文件內容:
bind 192.168.182.130 #綁定服務端地址 protected-mode yes #安全模式 port 6800 #端口 requirepass haohaio #密碼 daemonize yes #後臺運行 pidfile /var/run/redis_6379.pid #進程id文件 loglevel notice #日誌等級 logfile ""
#指定文件啓動: redis-server s21redis.conf #其中:輸入auth 輸入密碼 haohaio
redis是一種高級的key:value存儲系統,其中value支持五種數據類型
經常使用命令 :
keys * 查看全部key type key 查看key類型 expire key seconds 過時時間 ttl key 查看key過時剩餘時間 -2表示key已經不存在了 persist 取消key的過時時間 -1表示key存在,沒有過時時間 exists key 判斷key存在 存在返回1 不然0 del keys 刪除key 能夠刪除多個 dbsize 計算key的數量 flushdb 清除redis全部key,慎用 flushdb 清除redis全部key,慎用 flushdb 清除redis全部key,慎用
字符串類型,經過set命令,設置字符串類型的key
strings類型
set 設置key
get 獲取key
append 追加string
mset 設置多個鍵值對
mget 獲取多個鍵值對
del 刪除key
incr 遞增+1
decr 遞減-1
list類型,雙向隊列
lpush 從列表左邊插
rpush 從列表右邊插
lrange 獲取必定長度的元素 lrange key start stop
ltrim 截取必定長度列表
lpop 刪除最左邊一個元素
rpop 刪除最右邊一個元素
lpushx/rpushx key存在則添加值,不存在不處理
set集合
redis的集合,是一種無序的集合,集合中的元素沒有前後順序。
集合相關的操做也很豐富,如添加新元素、刪除已有元素、取交集、取並集、取差集等。咱們來看例子:
sadd/srem 添加/刪除 元素
sismember 判斷是否爲set的一個元素
smembers 返回集合全部的成員
sdiff 返回一個集合和其餘集合的差別
sinter 返回幾個集合的交集
sunion 返回幾個集合的並集
哈希數據結構
hashes即哈希。哈希是從redis-2.0.0版本以後纔有的數據結構。hashes存的是字符串和字符串值之間的映射,好比一個用戶要存儲其全名、姓氏、年齡等等,就很適合使用哈希。
hset 設置散列值
hget 獲取散列值
hmset 設置多對散列值
hmget 獲取多對散列值
hsetnx 若是散列已經存在,則不設置(防止覆蓋key)
hkeys 返回全部fileds
hvals 返回全部values
hlen 返回散列包含域(field)的數量
hdel 刪除散列指定的域(field)
hexists 判斷是否存在
PUBLISH channel msg
將信息 message 發送到指定的頻道 channel
SUBSCRIBE channel [channel ...]
訂閱頻道,能夠同時訂閱多個頻道
UNSUBSCRIBE [channel ...]
取消訂閱指定的頻道, 若是不指定頻道,則會取消訂閱全部頻道
PSUBSCRIBE pattern [pattern ...]
訂閱一個或多個符合給定模式的頻道,正則匹配
PUNSUBSCRIBE [pattern [pattern ...]]
退訂指定的規則, 若是沒有參數則會退訂全部規則
PUBSUB subcommand [argument [argument ...]]
查看訂閱與發佈系統狀態
------防止數據丟失,持久化到本地,以文件形式保存
持久化的方式 ,兩種 aof和 rdb模式
1.rdb
觸發機制,
1.手動執行save命令 2.或者配置觸發條件 save 200 10 #在200秒中內,超過10個修改類的操做
創建redis配置文件,開啓rdb功能
配置文件 s21_rdb.conf 內容以下 ,有關rdb的配置參數是 dbfilename dbmp.rdb ,一個是 save 900 1
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定義持久化文件存儲位置 dbfilename s21redis.rdb #rdb持久化文件 bind 127.0.0.1 #redis綁定地址 requirepass redhat save 900 1 save 300 10 save 60 10000 save 20 2 #在20秒內,超過2個修改類的操做
2.aof
--------將你的修改類的操做命令,追加到日誌文件中
修改aof配置文件,添加以下參數,核心功能參數是
appendonly yes appendfsync always 老是修改類的操做 everysec 每秒作一次持久化 no 依賴於系統自帶的緩存大小機制
建立aof配置文件s21aof.conf ,內容以下
3.rdb模式下的redis持久化,不重啓切換爲 aof模式
環境準備 1.準備一個有數據的rdb模式的redis數據庫 準備rdb配置文件 daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定義持久化文件存儲位置 dbfilename s21redis.rdb #rdb持久化文件 bind 127.0.0.1 #redis綁定地址 requirepass redhat save 900 1 save 300 10 save 60 10000 save 20 2 #在20秒內,超過2個修改類的操做 #詳細看博客https://www.cnblogs.com/pyyu/p/10061526.html 2.注意想要永久切換爲aof,還得修改配置文件方可
redis支持多實例的功能,一臺機器上,能夠運行多個單個的redis數據庫
環境準備,運行3個redis數據庫,達到 1主 2從的配置
主庫 6379.conf port 6379 daemonize yes pidfile /data/6379/redis.pid loglevel notice logfile "/data/6379/redis.log" dbfilename dump.rdb dir /data/6379 從庫 6380 port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 slaveof 127.0.0.1 6379 從庫 6381 port 6381 daemonize yes pidfile /data/6381/redis.pid loglevel notice logfile "/data/6381/redis.log" dbfilename dump.rdb dir /data/6381 slaveof 127.0.0.1 6379
開啓主從複製功能
redis-cli info #查看數據庫信息
redis-cli info replication
在6380 和6381數據庫上 ,配置主從信息,經過參數形式修改配置,臨時生效,注意要寫入配置文件
redis-cli -p 6380 slaveof 127.0.0.1 6379 redis-cli -p 6381 slaveof 127.0.0.1 6379
此時檢查6379的複製信息,以及6380 6381的複製信息
redis-cli -p 6380 info replication redis-cli -p 6381 info replication
主從複製是 讀寫分離的,master可寫, slave只讀
模擬主從複製故障,手動切換master-slave身份
1.殺死6379進程 ,幹掉主庫 2.手動切換 6381爲新的主庫,須要先關閉它的從庫身份 redis-cli -p 6381 slaveof no one 3.修改6380的新主庫是 6381 redis-cli -p 6380 slaveof 127.0.0.1 6381
redis-sentinel功能
1.環境準備
三個redis數據庫實例 ,配置好 1主 2從的配置
6379.conf port 6379 daemonize yes logfile "6379.log" dbfilename "dump-6379.rdb" dir "/var/redis/data/" 6380.conf port 6380 daemonize yes logfile "6380.log" dbfilename "dump-6380.rdb" dir "/var/redis/data/" slaveof 127.0.0.1 6379 6381.conf port 6381 daemonize yes logfile "6381.log" dbfilename "dump-6381.rdb" dir "/var/redis/data/" slaveof 127.0.0.1 6379
三個redis哨兵進程,指定好,檢測着誰
也是準備三個配置文件,內容以下
vim sentinel-26379.conf port 26379 dir /var/redis/data/ logfile "26379.log" // 當前Sentinel節點監控 192.168.182.130:6379 這個主節點 // 2表明判斷主節點失敗至少須要2個Sentinel節點節點贊成 // mymaster是主節點的別名 sentinel monitor s21ms 0.0.0.0 6379 2 //每一個Sentinel節點都要按期PING命令來判斷Redis數據節點和其他Sentinel節點是否可達,若是超過20000毫秒20s且沒有回覆,則斷定不可達 sentinel down-after-milliseconds s21ms 20000 //當Sentinel節點集合對主節點故障斷定達成一致時,Sentinel領導者節點會作故障轉移操做,選出新的主節點,原來的從節點會向新的主節點發起復制操做,限制每次向新的主節點發起復制操做的從節點個數爲1 sentinel parallel-syncs s21ms 1 //故障轉移超時時間爲180000毫秒 sentinel failover-timeout s21ms 180000 #三個哨兵的配置文件,如出一轍,僅僅是端口的區別 #三個哨兵的配置文件,如出一轍,僅僅是端口的區別 #三個哨兵的配置文件,如出一轍,僅僅是端口的區別 sed "s/26379/26380/g" sentinel-26379.conf >sentinel-26380.conf 配置sentinel-26380.conf sed "s/26379/26381/g" sentinel-26379.conf >sentinel-26381.conf 配置sentinel-26381.conf
2.分別啓動 三個redis數據庫, 以及三個 哨兵進程 ,注意 ,哨兵第一次啓動後,會修改配置文件,若是錯了,得刪除配置文件,從新寫
2.分別啓動 三個redis數據庫, 以及三個 哨兵進程 ,注意 ,哨兵第一次啓動後,會修改配置文件,若是錯了,得刪除配置文件,從新寫
2.分別啓動 三個redis數據庫, 以及三個 哨兵進程 ,注意 ,哨兵第一次啓動後,會修改配置文件,若是錯了,得刪除配置文件,從新寫
配置文件在這裏
sentinel-26379.conf port 26379 dir /var/redis/data/ logfile "26379.log" sentinel monitor s21ms 127.0.0.1 6379 2 sentinel down-after-milliseconds s21ms 20000 sentinel parallel-syncs s21ms 1 sentinel failover-timeout s21ms 180000 #加一個後臺運行 daemonize yes #僅僅是端口的不一樣 sentinel-26380.conf
sentinel-26381.conf
#啓動 redis-sentinel sentinel-26379.conf redis-sentinel sentinel-26380.conf redis-sentinel sentinel-26381.conf
3.驗證哨兵是否正常
redis-cli -p 26379 info sentinel 看到master0:name=s21ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3 表示沒問題
4.幹掉主庫 ,檢查主從切換狀態
kill -9 12749 ps -ef|grep redis redis-cli -p 6380 info replication redis-cli -p 6381 info replication redis-cli -p 6380 info replication redis-cli -p 6381 info replication