全網最全Redis學習
- 2022 年 9 月 15 日
- 筆記
一.Redis簡介
Redis是以Key-Value形式進行存儲的NoSQL資料庫,C語言進行編寫的。平時操作的數據都在記憶體中,效率特高,讀的效率110000/s,寫81000/s,所以多把Redis當做快取工具使用。同時通過Redis Sentinel提供高可用,通過Redis Cluster提供自動分區。
對於上述提到的NoSQL資料庫,常見NoSQL資料庫:memcached :鍵值對,記憶體型資料庫,所有數據都在記憶體中。Redis:和Memcached類似,還具備持久化能力。HBase:以列作為存儲。MongoDB:以Document做存儲。
二、Redis常用五大類型
Redis不僅僅支援簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲,它還支援數據的備份,即master-slave模式的數據備份,同樣Redis支援數據的持久化,可以將記憶體中的數據保持在磁碟中,重啟的時候可以再次載入進行使用。Redis支援的五大數據類型包括String(字元串 用法: 鍵 值),Hash(哈希 類似Java中的 map 用法: 鍵 鍵值對),List(列表 用法:鍵 集合 不可以重複),Set(集合 用法:鍵 集合 可以重複),Zset(sorted set 有序集合 用法: 鍵 值 值)
三、Redis常用命令
可參考//www.redis.net.cn/order/
四、Redis持久化策略
Redis不僅是記憶體型資料庫,還有持久化能力,持久化策略有兩種:RDB、AOF。
rdb文件是一個緊湊文件,直接使用rdb文件就可以還原數據。數據保存會由一個子進程進行保存,不影響父進程。恢複數據的效率要高於aof。缺點就是:每次保存點之間導致redis不可意料的關閉,可能會丟失數據。由於每次保存數據都需要fork()子進程,在數據量比較大時可能會比較耗費性能。
AOF默認是關閉的,需要在配置文件中開啟AOF。Redis支援AOF和RDB同時生效,如果同時存在,AOF優先順序高於RDB(Redis重新啟動時會使用AOF進行數據恢復)。監聽執行的命令,如果發現執行了修改數據的操作,同時直接同步到資料庫文件中。相對RDB數據更加安全。缺點:相同數據集AOF要大於RDB。相對RDB可能會慢一些。可以通過修改redis.conf,可將appendonly修改為yes,appendfilename “appendonly.aof”。
五、Redis主從複製
支援集群功能,為保證單一節點可用性,支援主從複製功能。每個節點有N個複製品,其中一個複製品是主,另外N-1 複製品是從,即支援一主多從:一個主可有多個從,而一個從又可以看成主,它還可以有多個從。優點是:(1)增加單一節點健壯性,提升整個集群穩定性。(Redis中當超過1/2節點不可用時,整個集群不可用)。(2)從節點可以對主節點數據備份,提升容災能力。讀寫分離。(3)在redis主從中,主節點一般用作寫(具備讀的能力),從節點只能讀,利用這個特性實現讀寫分離,寫用主,讀用從。
一主多從搭建:
- 新建目錄:madir /usr/local/replica
- 複製目錄:把之前安裝redis單機中的bin目錄複製一下,cp -r /usr/local/redis/bin /usr/local/replica/master\ cp -r /usr/local/redis/bin /usr/local/replica/slave1
cp -r /usr/local/redis/bin /usr/local/replica/slavel2 - 修改從的配置文件 。修改兩個從的redis.conf,制定主節點ip和埠,並修改自身埠號防止和其他redis衝突。vim /usr/local/replica/slavel/redis.conf * 指定主節點ip和埠號 replicaof ip.port
- 修改完之後,啟動redis實例:cd /usr/local/replica vim startup.sh在文件添加三個redis實例:如: ./redis-server redis.conf;賦予許可權:chmod a+x startup.sh;開啟:./startup.sh; 查看啟動狀態:ps -ef|grep redis;測試一下:cd /usr/local/replica/master/; ./redis-cli;在進入到slave查看數據是否同步。cd /usr/local/replica/slavel; ./redis -cli -p 6380
六、哨兵
用於控制上述的主從,當主宕機,節點不具備寫能力,讓一個從變成主,使整個節點繼續工作,Redis哨兵就是幫助控制整個節點,干這個事情的。Redis支援但哨兵和多哨兵,單哨兵只要哨兵發現master宕機,直接選取一個master;多哨兵是根據人為設定,當達到一定數量哨兵才認為master宕機,在進行重新選主。
七、集群
當集群中超過或等於1/2節點不可用時,整個集群不可用。為了搭建穩定集群,都採用奇數節點。建立集群時,需要藉助ruby腳本實現集群,在redis5中可以使用自帶的redis-cli實現集群功能。集群測試的命令:./redis-cli -p port -c。
八、Jedis
Redis給java語言提供客戶端API,稱之為Jedis。Jedis API特別簡單,基本都是創建對象調用方法。
單機版
點擊查看程式碼
public void testStandalone(){
Jedis jedis = new Jedis("ip",port);
jedis.set("name","m-standalone");
String value = jedis.get("name");
System.out.println(value);
}
帶有連接池
點擊查看程式碼
public void testPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(20);
jedisPoolConfig.setMaxIdle(5);
jedisPoolConfig.setMinIdle(3);
JedisPool jedisPool = new JedisPool(jedisPoolConfig,"ip",port);
Jedis jedis = jedisPool.getResource();
jedis.set("name","my-pool");
String value = jedis.get("name");
System.out.println(value);
}
九、springboot整合Redis
十、Redis作為快取使用>