心智圖資源庫 Redis
這是一篇關於Redis的心智圖,主要內容包括:八、Redis持久化,七、Redis事務,六、發布和訂閱,二、啟動,一、安裝Redis7.0,五、Redis配製文件,四、Redis資料類型,三、Redis鍵(key)相關的命令。
編輯於2024-03-28 15:31:48Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Projektmanagement ist der Prozess der Anwendung von Fachwissen, Fähigkeiten, Werkzeugen und Methoden auf die Projektaktivitäten, so dass das Projekt die festgelegten Anforderungen und Erwartungen im Rahmen der begrenzten Ressourcen erreichen oder übertreffen kann. Dieses Diagramm bietet einen umfassenden Überblick über die 8 Komponenten des Projektmanagementprozesses und kann als generische Vorlage verwendet werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Projektmanagement ist der Prozess der Anwendung von Fachwissen, Fähigkeiten, Werkzeugen und Methoden auf die Projektaktivitäten, so dass das Projekt die festgelegten Anforderungen und Erwartungen im Rahmen der begrenzten Ressourcen erreichen oder übertreffen kann. Dieses Diagramm bietet einen umfassenden Überblick über die 8 Komponenten des Projektmanagementprozesses und kann als generische Vorlage verwendet werden.
Redis
一、安裝Redis7.0
1. 下載;放到opt目錄下
https://redis.io/download/
2. 解壓縮;在opt目錄下
tar -zxvf redis-7.0.0.tar.gz
解壓縮後
3. 進入目錄redis-7.0.11
安裝gcc
yum install gcc-c
make
make install
截圖
4. 預設安裝目錄
/usr/local/bin
Linux下的/usr/local類似我們windows系統的C:\Program Files
查看
redis-benchmark:效能測試工具,服務啟動後執行該指令,看看自己本子效能如何
redis-check-aof:修復有問題的AOF文件
redis-check-dump:修復有問題的dump.rdb文件
redis-cli:客戶端,操作入口
redis-sentinel:redis叢集使用
redis-server:Redis伺服器啟動指令
5. 修改redis.conf配製文件
二、啟動
進入Redis預設安裝目錄
redis-server:Redis伺服器啟動指令
redis-cli:客戶端,操作入口
如果設定了密碼:auth 密碼
後台啟動
備份Redis.conf
daemonize no 改成 yes
[root@ecs-353138 redis-7.0.0]# redis-server ./redis.conf
啟動redis要指定設定文件,沒有明確指定設定文件,其實redis預設讀取的是內部的設定文件,而不是安裝目錄下的redis.conf
關閉
單一實例關閉:redis-cli -a 密碼 shutdown
多實例關閉:指定連接埠關閉:redis-cli -p 6379 shutdown
卸載Redis
1. 停止Redis服務
2. 刪除/usr/local/lib目錄下與redis相關的文件
三、Redis鍵(key)相關的命令
keys *
查看目前庫所有key
exists key
判斷某個key是否存在
type key
查看你的key是什麼類型
del key
刪除指定的key數據
unlink key
根據value選擇非阻塞刪除
Redis UNLINK 指令跟 DEL 指令十分相似:用來刪除指定的 key 。就像 DEL 一樣,如果 key 不存在,則將其忽略。但是,該命令會執行命令之外的線程中執行實際的記憶體回收,因此它不是阻塞,而 DEL 是阻塞的。這就是指令名稱的來源:UNLINK 指令只是將鍵與鍵空間斷開連線。實際的刪除將稍後異步進行。
expire key 10
10秒鐘,為給定的key設定過期時間
ttl key
查看還有多少秒過期,-1表示永不過期,-2表示已過期
select 0
切換資料庫
disize
查看目前資料庫的key的數量
flushdb
清空目前庫
flushall
通殺全部庫
四、Redis資料類型
五種基本資料類型
string(字串)
簡介
String是Redis最基本的類型,一個key對應一個value。 String類型是二進位安全的。意味著Redis的string可以包含任何資料。例如jpg圖片或是序列化的物件。一個Redis中字串value最多可以是512M。
常用命令
set key value NX
NX: 當資料庫中key不存在時,可以將key-value新增資料庫 XX:當資料庫中key存在時,可以將key-value新增資料庫,與NX參數互斥 EX:key的超時秒數 PX:key的超時毫秒數,與EX互斥
新增鍵值對
get key
查詢對應鍵值
append key value
將給定的 value 追加到原值的結尾
strlen key
得到值的長度
setnx key value
只有在 key 不存在時 設定 key 的值
incr key
將 key 中儲存的數字值增加1
decr key
將 key 中儲存的數字值減1
只能對數字值操作,如果為空,新增值為1或-1
incrby / decrby key 步長
將 key 中儲存的數字值增減。自訂步長
mset key1 value1 key2 value2
同時設定一個或多個 key-value對
mget key1 key2
同時取得一個或多個 value
msetnx key1 value1 key2 value2
原子性,有一個失敗都失敗
同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在
getrange key 起始位置 結束位置
獲得值的範圍,類似java中的substring,前包,後包
setrange key 起始位置 value
用 value 覆寫 key 所儲存的字串值,從 起始位置 開始(索引從0開始)
setex key 過期時間 value
設定鍵值的同時,設定過期時間,單位秒
getset key value
以新換舊,設定了新值同時獲得舊值
資料結構
String的資料結構為簡單動態字串(Simple Dynamic String,縮寫SDS)。
list(列表)
簡介
單鍵多值,依照插入的順序排序,你可以加上一個元素到清單的頭部(左邊)或尾部(右邊)。
常用命令
lpush / rpush key value1 value2
從左邊/右邊插入一個或多個數值
lpop / rpop
從左邊/右邊吐出一個數值。值在鍵在,值光鍵亡
rpoplpush key1 key2
從key1列表右邊吐出一個值,插到key2列表左邊
lrange key start stop
lrange age 0 -1,表示取得所有
依索引下標取得元素(從左到右)
lindex key index
依索引下標取得元素(從左到右)
llen key
獲得列表長度
linsert key before value newvalue
在value的前面插入newvalue的值
lrem key n value
從左邊刪除n個value(從左到右)
lset key index value
將列表key下標為index的值替換成value
資料結構
① List的資料結構為快速鍊錶quickList。 ② 首先在列表元素較少的情況下會使用一塊連續的內存存儲,這個結構是ziplist,也即是壓縮列表。 ③ 當資料量比較多的時候才會改成quicklist
set(集合)
簡介
自動排重、Set是string類型的無序集合,底層是一個value為空的hash表,增刪查的複雜的都是O(1)
常用命令
sadd key value1 value2
將一個或多個 member 元素加入集合 key 中,已經存在的 member 元素將被忽略
smembers key
取出該集合的所有值
sismember key value
判斷集合key是否為含有該value值,有1,沒有0
scard key
傳回該集合的元素個數
srem age value1 value2
刪除集合中的某個元素
spop key
隨機從該集合中吐出一個值
srandmember key n
隨機從該集合中取出n個值。不會從集合中刪除
smove source destination value
把集合中一個值從一個集合移動到另一個集合
sinter key1 key2
傳回兩個集合的交集元素
sunion key1 key2
傳回兩個集合的並集元素
sdiff key1 key2
傳回兩個集合的差集元素(key1中的,不包含key2中的)
資料結構
① Set資料結構是dict字典,字典是用哈希表實作的。 ② Java中HashSet的內部實作使用的是HashMap,只不過所有的value都指向同一個物件。 Redis的set結構也是一樣,它的內部也使用hash結構,所有的value都指向同一個內部值。
hash(哈希)
簡介
Redis hash 是一個鍵值對集合,是一個string類型的field和value的映射表,hash特別適合用於儲存物件。
常用命令
hset key field value
給key集合中的 field鍵賦值value
hget key field
從key1集合field取出 value
hmset key1 field1 value1 field2 value2
批量設定hash的值
hexists key field
查看哈希表 key 中,給定域 field 是否存在
hkeys key
列出該hash集合的所有field
hvals key
列出該hash集合的所有value
hincrby key field increment
為哈希表 key 中的域 field 的值加上增量 1 -1
hsetnx key field value
將雜湊表 key 中的域 field 的值設為 value ,當且僅當域 field 不存在
資料結構
Hash類型對應的資料結構是兩種:ziplist(壓縮列表),hashtable(哈希表)。當field-value長度較短且個數較少時,使用ziplist,否則使用hashtable
zset(有序集合)
簡介
zset與普通集合set非常相似,是一個沒有重複元素的字串集合,不同之處是有序集合的每個成員都關聯了一個評分(score),這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重複了
常用命令
zadd key score1 value1 score2 value2
將一個或多個 member 元素及其 score 值加入到有序集 key 當中
zrange key start stop [WITHSCORES]
返回有序集 key 中,下標在 start stop之間的元素,帶WITHSCORES,可以讓分數一起和值返回到結果集
zrangebyscore key min max
在傳回有序集 key 中,所有 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。有序集成員依 score 值遞增(從小到大)次序排列
zrevrangebyscore key max min
改為由大到小排列
zincrby key increment value
為元素的score加上增量
zrem key value
刪除該集合下,指定值的元素
zcount key min max
統計此集合,分數區間內的元素個數
zrank key value
傳回該值在集合中的排名,從0開始
資料結構
hash,hash的作用就是關聯元素value與權重score,保障元素value的唯一性,可以透過元素value找到對應的score值。
跳躍表,跳躍表的目的在於給元素value排序,根據score的範圍來取得元素列表。
三種進階資料類型
Bitmaps
Bitmaps本身不是一種資料類型, 實際上它就是字串(key-value) , 但它可以對字串的位元進行操作。
HyperLogLog
Redis HyperLogLog 是用來做基數統計的演算法。 HyperLogLog 的優點是,在輸入元素的數量或體積非常非常大時,計算基數所需的空間總是固定的、且是很小的。
Geospatial
GEO:Geographic,地理資訊的縮寫。類型,就是元素的二維座標,在地圖上就是經緯度。 redis基於此類型,提供了經緯度設置,查詢,範圍查詢,距離查詢,經緯度Hash等常見操作。
五、Redis配製文件
網路相關配製
bind
預設情況bind=127.0.0.1只能接受本機的存取請求
protected-mode
將本機存取保護模式設定no
port
端口,預設6379
timeout
一個空閒的客戶端維持多少秒會關閉,0表示關閉該功能。即永不關閉
tcp-keepalive
單位為秒,如果設定為0,則不會進行Keepalive偵測,建議設定成60
存取客戶端的一種心跳檢測,每個n秒檢測一次
GENERAL通用
daemonize
是否為(守護進程)後台進程,設定為yes
pidfile
存放pid文件的位置,每個實例會產生不同的pid文件
loglevel
生產環境選擇notice 或warning
指定日誌記錄級別,Redis總共支援四個級別:debug、verbose、notice、warning,預設為notice
logfile
日誌檔案名稱
databases 16
設定庫的數量 預設16,預設資料庫為0,可以使用SELECT <dbid>指令在連線上指定資料庫id
SECURITY安全
設定密碼
LIMITS限制
maxclients
設定redis同時可以與多少個客戶端進行連接
預設為10000個客戶端
如果達到了此限制,redis則會拒絕新的連線要求,並且向這些連線請求方發出「max number of clients reached」以作回應
maxmemory
maxmemory-policy
maxmemory-samples
六、發布和訂閱
什麼是發布和訂閱?
Redis 發布訂閱 (pub/sub) 是一種訊息通訊模式:發送者 (pub) 發送訊息,訂閱者 (sub) 接收訊息。
客戶端訂閱該頻道
當給這個頻道發布訊息後,訊息就會發送給訂閱的客戶端
命令實現
開啟一個客戶端訂閱channel1
subscribe channel1
開啟另一個客戶端,給channel1發布訊息hello
publish channel1 hello
回傳的2是訂閱的數量
七、Redis事務
1、定義
Redis事務是一個單獨的隔離操作:事務中的所有指令都會序列化、依序執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。
Redis事務的主要作用就是串連多個指令來防止別的指令插隊。
2、Multi、Exec、discard
① 從輸入Multi指令開始,輸入的指令都會依序進入指令佇列中,但不會執行,直到輸入Exec後,Redis會將先前的指令佇列中的指令依序執行。 ② 組隊的過程中可以透過discard放棄組隊
組隊成功,提交成功
組隊階段報錯,提交失敗
組隊成功,提交有成功失敗
3、事務的錯誤處理
組隊中某個指令出現了報告錯誤,執行時整個的所有佇列都會被取消。
如果執行階段某個指令報出了錯誤,則只有報錯的指令不會被執行,而其他的指令都會執行,不會回溯。
4、Redis事務三特性
單獨的隔離操作
事務中的所有指令都會序列化、依序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。
沒有隔離等級的概念
佇列中的命令沒有提交之前都不會實際被執行,因為交易提交前任何指令都不會被實際執行
不保證原子性
事務中如果有一條命令執行失敗,其後的命令仍然會被執行,沒有回滾
八、Redis持久化
RDB(Redis DataBase)
是什麼?
在指定的時間間隔內將記憶體中的資料集快照寫入磁碟, 也就是行話講的Snapshot快照,它恢復時是將快照檔案直接讀到記憶體裡
備份如何執行
Redis會單獨建立(fork)一個子程序來進行持久化,會先將資料寫入到 一個暫存檔案中,待持久化過程都結束了,再用這個臨時檔案取代上次持久化好的檔案。 整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能如果需要進行大規模資料的恢復,且對於資料恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效能。 RDB的缺點是最後一次持久化後的資料可能會遺失。
Fork
Fork的作用是複製一個與目前進程一樣的進程。新進程的所有資料(變數、環境變數、程式計數器等) 數值都和原進程一致,但是是一個全新的進程,並作為原始進程的子進程。
在Linux程式中,fork()會產生一個和父進程完全相同的子進程,但子進程在此後多會exec系統調用,出於效率考慮,Linux中引入了“寫時複製技術”
一般情況父進程和子進程會共用同一段實體內存,只有進程空間的各段的內容要發生變化時,才會將父進程的內容複製一份給子進程。
dump.rdb文件
在redis.conf中設定檔名稱,預設為dump.rdb
優勢
適合大規模的資料恢復
對資料完整性和一致性要求不高更適合使用
節省磁碟空間
恢復速度快
不足
在備份週期在一定間隔時間做一次備份,所以如果Redis意外down掉的話,就會遺失最後一次快照後的所有修改。
總結
AOF(Append Only File)
是什麼?
以日誌的形式來記錄每個寫入操作(增量保存),將Redis執行過的所有寫指令記錄下來(讀操作不記錄), 只許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構建數據,換言之,redis 重啟的話就根據日誌文件的內容將寫指令從前到後執行一次以完成數據的恢復工作
AOF持久化流程
AOF預設不開啟
AOF和RDB同時開啟,redis聽誰的?
AOF和RDB同時開啟,系統預設取AOF的資料(資料不會存在遺失)
優勢
備份機制更穩健,遺失資料機率更低
不足
比起RDB佔用更多的磁碟空間
恢復備份速度要慢。
總結