Redis 中 set 和 hset 有什麼不同,各自使用場景

JaneWorld發表於2019-06-11

Redis 鍵命令用於管理 redis 的鍵。
set 就是普通的已key-value 方式儲存資料,set 儲存單個大文字非結構化資料。
$redis->set($key, $field);
$redis->get($key);
$redis->del($key,);
場景:單個特殊標識,如在 redis 中建立一個 key 並設定值。

hset 則儲存結構化資料,一個 hash 儲存一條資料,一個 filed 則儲存 一條資料中的一個屬性,value 則是屬性對應的值。

Redis hash 是一個string型別的field和value的對映表,hash特別適合用於儲存物件。
$redis->hset($key, $field, $value);
$redis->hget($key, $field, $value);
$redis->hdel($key, $field, $value);
場景:整表快取到 redis 中則使用 hash ,一條資料一個hash,一個hash 裡則包含多個filed(表的欄位屬性)。

第一種型別:String Key-Value
第二種型別:Hash:key-filed-value
第三種型別:List
  List 有順序可重複
  lpush list 1  2  3  4 從左新增元素 
     rpush list 1 2 3 4    從右新增元素
     lrange list 0 -1 (從0 到-1 元素檢視:也就表示檢視所有)
     lpop list (從左邊取,刪除)
     rpop list  (從右邊取,刪除)
第四種型別 :Set
  Set 無順序,不能重複
第五種型別:SortedSet(zset)
  有順序,不能重複
  適合做排行榜 排序需要一個分數屬性

什麼是Redis持久化?Redis有哪幾種持久化方式?優缺點是什麼?
持久化就是把記憶體的資料寫到磁碟中去,防止服務當機了記憶體資料丟失。
Redis 提供了兩種持久化方式:RDB(預設) 和AOF 
RDB:
rdb是Redis DataBase縮寫
功能核心函式rdbSave(生成RDB檔案)和rdbLoad(從檔案載入記憶體)兩個函式。

AOF:
Aof是Append-only file縮寫
每當執行伺服器(定時)任務或者函式時flushAppendOnlyFile 函式都會被呼叫, 這個函式執行以下兩個工作。

aof寫入儲存:
WRITE:根據條件,將 aof_buf 中的快取寫入到 AOF 檔案
SAVE:根據條件,呼叫 fsync 或 fdatasync 函式,將 AOF 檔案儲存到磁碟中。
儲存結構:
  內容是redis通訊協議(RESP )格式的命令文字儲存。

比較
1、aof檔案比rdb更新頻率高,優先使用aof還原資料。
2、aof比rdb更安全也更大
3、rdb效能比aof好
4、如果兩個都配了優先載入AOF

什麼是快取穿透?如何避免?什麼是快取雪崩?何如避免?
快取穿透:
一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢(比如DB)。一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。
如何避免?
1:對查詢結果為空的情況也進行快取,快取時間設定短一點,或者該key對應的資料insert了之後清理快取。
2:對一定不存在的key進行過濾。可以把所有的可能存在的key放到一個大的Bitmap中,查詢時通過該bitmap過濾。

快取雪崩:
當快取伺服器重啟或者大量快取集中在某一個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。導致系統崩潰。
如何避免?
1:在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許一個執行緒查詢資料和寫快取,其他執行緒等待。
2:做二級快取,A1為原始快取,A2為拷貝快取,A1失效時,可以訪問A2,A1快取失效時間設定為短期,A2設定為長期
3:不同的key,設定不同的過期時間,讓快取失效的時間點儘量均勻。

Redis**過期策略都有哪些?**
定期刪除:指的是redis預設是每隔100ms就隨機抽取一些設定了過期時間的key,檢查其是否過期,如果過期就刪除。
惰性刪除:在你獲取某個key的時候,redis會檢查一下 ,這個key如果設定了過期時間那麼是否過期了,如果過期了此時就會刪除,不會給你返回任何東西。

Docker建立Redis服務容器

映象(等於作業系統)用來建立容器,docker(像簡易的一個Linux環境)是基於容器來執行的,docker倉庫用來儲存映象。目前公開倉庫是Docker Hub,供使用者去下載。

redis主(寫)從(讀)複製
面臨問題:
1.機器故障
2.容量瓶頸(擴容)
Redis主從解決,節點的單一使用問題,可把多個資料複製副本部署到其它節點上進行,實現資料的高可用。
主伺服器做的操作,從伺服器1秒內同步,資料的複製是單向的。只能主到從,一個主節點可有多個從節點,一個從節點可有多個主節點,從節點可以有從節點。

哨兵和叢集做到資料的高可用性。

Redis的配置檔案:
etc/redis.conf
埠的監聽 bind 0.0.0.0
保護模式 protected-mode no(不允許本地127.0.0.1 來連結)

檢測是否有安裝Redis
[root@localhost bin]# whereis redis-cli
redis-cli: /usr/bin/redis-cli
[root@localhost bin]# whereis redis-server
redis-server: /usr/bin/redis-server

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章