全網最全Redis學習

2022-09-15 15:01:01

一.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常用命令
可參考https://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作為快取使用>