您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何掌握Redis場景設計”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何掌握Redis場景設計”吧!
接下來看看每個數據結構常用的指令有哪些,我們用一張表比較清晰的展示:
場景一:商品庫存數
從業務上,商品庫存數據是熱點數據,交易行為會直接影響庫存。而 Redis 自身 String 類型提供了:
set goods_id 10; 設置 id 為 good_id 的商品的庫存初始值為 10;
decr goods_id; 當商品被購買時候,庫存數據減 1。
依次類推的場景:商品的瀏覽次數,問題或者回復的點贊次數等。這種計數的場景都可以考慮利用 Redis 來實現。
場景二:時效信息存儲
Redis 的數據存儲具有自動失效能力。也就是存儲的 key-value 可以設置過期時間:set(key, value, expireTime)。
比如,用戶登錄某個 App 需要獲取登錄驗證碼, 驗證碼在 30 秒內有效。那么我們就可以使用 String 類型存儲驗證碼,同時設置 30 秒的失效時間。
Redis 在存儲對象(例如:用戶信息)的時候需要對對象進行序列化轉換然后存儲。
還有一種形式,就是將對象數據轉換為 JSON 結構數據,然后存儲 JSON 的字符串到 Redis。
對于一些對象類型,還有一種比較方便的類型,那就是按照 Redis 的 Hash 類型進行存儲。
例如,我們存儲一些網站用戶的基本信息, 我們可以使用:
這樣就存儲了一個用戶基本信息,存儲信息有:{name : 小明, phone : “123456”,sex : “男”}
當然這種類似場景還非常多, 比如存儲訂單的數據,產品的數據,商家基本信息等。以淘寶購物車為主
1.原生:
set user: 1:name james;
set user:1:age 23;
set user:1:sex boy;
優點:簡單直觀,每個鍵對應一個值
缺點:鍵數過多,占用內存多,用戶信息過于分散,不用于生產環境
2.將對象序列化存入
redis set user:1 serial ize (userInfo);
優點:編程簡單,若使用序列化合理內存使用率高
缺點:序列化與反序列化有一定開銷,更新屬性時需要把userInfo全取出來進行反序列化,更新后再序列化到redis
3.hash存儲:
hmset user:1 name james age 23 sex boy
優點:簡單直觀,使用合理可減少內存空間消耗
缺點:要控制ziplist 與hashtable兩種編碼轉換,Mhashtable會消耗更多內存。
list 是按照插入順序排序的字符串鏈表。可以在頭部和尾部插入新的元素(雙向鏈表實現,兩端添加元素的時間復雜度為 O(1)) 。
場景一:消息隊列實現
目前有很多專業的消息隊列組件 Kafka、RabbitMQ 等。 我們在這里僅僅是使用 list 的特征來實現消息隊列的要求。在實際技術選型的過程中,大家可以慎重思考。
list 存儲就是一個隊列的存儲形式:
lpush key value; 在 key 對應 list 的頭部添加字符串元素;
rpop key;移除列表的最后一個元素,返回值為移除的元素。
場景二:最新上架商品
在交易網站首頁經常會有新上架產品推薦的模塊, 這個模塊是存儲了最新上架前 100 名。
這時候使用 Redis 的 list 數據結構,來進行 TOP 100 新上架產品的存儲。
Redis ltrim 指令對一個列表進行修剪(trim),這樣 list 就會只包含指定范圍的指定元素。
start 和 stop 都是由 0 開始計數的,這里的 0 是列表里的第一個元素(表頭),1 是第二個元素。
如下偽代碼演示:
set 也是存儲了一個集合列表功能。和 list 不同,set 具備去重功能。當需要存儲一個列表信息,同時要求列表內的元素不能有重復,這時候使用 set 比較合適。與此同時,set 還提供的交集、并集、差集。
例如,在交易網站,我們會存儲用戶感興趣的商品信息,在進行相似用戶分析的時候, 可以通過計算兩個不同用戶之間感興趣商品的數量來提供一些依據。
獲取到兩個用戶相似的產品, 然后確定相似產品的類目就可以進行用戶分析。
類似的應用場景還有, 社交場景下共同關注好友, 相似興趣 tag 等場景的支持。
setA={A,B,C} setB={B, C}
1)集合與集合之間的交集
sinter setA setB-->得到集合{B,C}
集合與集合之間的并集
sunion setA setB -->得到集合{A,B,C}
3)集合與集合之間的差集
sdiff setA setB-->得到集合{A}
如何實現微博的微關系設計?
常用于排行榜,如視頻網站需要對用戶上傳視頻做排行榜,或點贊數與集合有聯系,不能有重復的成員
感謝各位的閱讀,以上就是“如何掌握Redis場景設計”的內容了,經過本文的學習后,相信大家對如何掌握Redis場景設計這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。