從零開始---初始redis
1. redis基礎
1.1. 定義
redis是一個開源的、使用C語言編寫的、支持網絡交互的、基於內存可持久化的高性能key-value型NoSQL數據庫
1.2. 數據類型
-
- String 字符串 整數 浮點數
- Hash 包含鍵值對的無序散列表
- List 一個鏈表,鏈表上的每個節點都包含了一個字符串
- Set 包含字符串的無序收集器,並且被包含的每個字符串都是獨一無二,各不相同
- SortedSet(Zset)字符串成員,與浮點數分值之間的有序映射,元素的排列順序由分值的大小決定。
1.3.官方下載地址
https://redis.io/
2.redis實現
2.1 簡單安裝
通過官方地址下載壓縮包
tar xzf redis壓縮包
mv 到存儲位置
make 進行安裝
2.2 啟動實例
2.2.1 默認啟動
進入redis目錄的src文件夾
./redis-server 會使用默認配置
2.2.2 根據配置文件啟動
//是否後臺啟動daemonize no/yes //默認端口 port 6379 //AOF開關 appendonly no/yes //日誌位置 logfile /var/log/redis.log //RDB持久化數據文件 logfile /var/log/redis.log
//啟動
.
/redis-server
/etc/redis/redis
.conf
3.redis持久化
3.1 AOF(Append Only File)
3.1.1 定義
它的出現是為了彌補RDB的不足(數據不一致),采用了日誌的形式記錄每個寫操作,並追加到文件中。Redis重啟的會根據日誌文件的內容通過寫指令從前到後執行一次完成數據的恢復工作。
3.1.2 更新日誌條件
always:同步持久化,每次發生數據變化會立刻寫入到磁盤中。
everysec:出廠默認推薦,每秒記錄一次(默認值)
no: 不同步
3.1.3 AOF的重寫機制
AOF是會不斷地命令追加到文件的末尾,所以隨著寫入命令的不斷增加,AOF的體積也會變得越來越大,執行BGREWRITEOF命令,Redis將生產一個新的AOF文件,這個文件包含重建當前數據集所需最少命令。
3.1.4 優缺點
優點:數據的完整性和一致性
缺點:AOF的內容變多,文件會越來越大,數據恢復也會越來越慢
3.1.5 操作
第一步:修改配置文件,開啟AOF持久化配置
第二步:重啟Redis服務,並進入Redis自帶的客戶端
第三步:保存值,然後模擬數據丟失,關閉Redis服務
第四步:重啟服務,發現數據恢復了
第五步:修改appendonly.aof,模擬文件異常情況
第六步:重啟Redis服務失敗。這同時也說明了,RDB和AOF可以同時存在,且優先加載AOF文件
第七步:校驗appendonly.aof文件。重啟Redis服務後正常
3.2 RDB(Redis DataBase)
3.2.1 定義
Redis默認的持久化方案,在指定的時間間隔內,執行制定次數的寫操作,則會將內存中的數據寫入到磁盤中。即在指定目錄下生成一個dump.rdb文件。Redis重啟會通過加載dump.rdb文件恢復程序
3.2.2 優缺點
優點:1 適合大規模的數據恢復
2 如果業務對數據完整性和一致性不高,RDB是很好的選擇
缺點:1 數據的完整性和一致性不高,因為RDB可能在最後一次備份時宕機
2 備份時占用內存,因為Redis在備份時會獨立創建一個子進程,將數據寫入到一個臨時文件(原來的數據的兩倍),最後再將臨時文件替換之前的備份文件。
3.2.3 操作
第一步:vim修改持久化配置時間,120秒內修改5次則持久化一次
第二步:重啟服務配置生效
第三步:分別set5個key,過兩分鐘後,在bin的當前目錄下會自動生產一個dump.rdb文件。
第四步:將當前的dump.rdb備份一份(模擬線上工作)
第五步:執行FLUSHALL命令清空數據庫數據
第六步:重啟Redis服務,恢復數據,數據不見了,因為FLUSHALL也有觸發RDB快照功能
第七步:將備份的dump_bk.rdb替換dump.rdb然後重啟redis
4.問題收集
Redis是單進程單線程的
redis利用隊列技術將並發訪問變為串行訪問,消除了傳統數據庫串行控制的開銷
Redis的回收策略
volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
no-enviction(驅逐):禁止驅逐數據
redis相比memcached有哪些優勢?
-
memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數據類型
-
redis的速度比memcached快很多
-
redis可以持久化其數據
從零開始---初始redis