一.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主從中,主節點一般用作寫(具備讀的能力),從節點只能讀,利用這個特性實現讀寫分離,寫用主,讀用從。
一主多從搭建:
六、哨兵
用於控制上述的主從,當主宕機,節點不具備寫能力,讓一個從變成主,使整個節點繼續工作,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作為快取使用>
本文來自部落格園,作者:轉身我便在你身後,轉載請註明原文連結:https://www.cnblogs.com/jqqlf/p/16695849.html