您好,登錄后才能下訂單哦!
Redis實現緩存的思路有哪些,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
場景一:類似于微博,實現關注和被關注功能。
思路:
對每個用戶使用兩個集合類型鍵,用來存儲關注別人的用戶和被該用戶關注的用戶。當用戶A關注用戶B的時候,執行兩步操作:
sadd user:A B
sadd user:B A
問題1:
完成一次用戶關注操作,需要執行兩步代碼,第一次實現用戶A關注B,成為了B的粉絲。而第二步的時候,因為某種原因沒有執行或執行成功,則A并不知道B關注了自己
事務:
事務的原理是,先將一個事務的命令發送給Redis,然后再讓Redis依次執行這些命令。
一個事務中,要么都執行成功,要么都不執行
multi命令告訴redis準備介紹事務,先暫存起來,不要執行。然后發送需要一起執行的命令,最后exec結束事務,redis依次執行那么命令
如果在執行exec命令之前,因為某種原因,redis斷掉了,Redis會清空事務隊列.
問題2:
有些時候,我們不僅需要通過事務來處理一些必須一起成功的動作,比如銀行轉賬,從銀行卡1轉出錢到銀行卡2,必須是都一起成功,不能說從銀行卡1中扣完錢之后,沒有進到銀行卡2賬上,兩者動作比如都要完成。還有些時候,我們既要一起完成,也需要根據其中一步操作的結果來進行下一步操作
WATCH命令
watch,事務中的另一個命令。監控一個或多個鍵,一旦其中一個鍵被修改或刪除,之后的事務就不會執行,一直到exec結束。
通過watch監控key1,之后修改了key1,所以事務中的set命令并沒有執行
場景二:限時活動,緩存,驗證碼失效
在實際開發中,經常會遇到限時活動,郵箱失效時間,驗證碼失效時間等場景,這些數據需要在一定的時間內有效,過期刪除,如果在關系型數據庫中保存這些數據,每次校驗都需要查詢數據,對比時間,然后將數據置為失效,或者刪除。而在Redis中,則可以通過expire設置失效時間,自動刪除。
expire設置失效時間,時間單位秒。成功返回1,如果key不存在返回0
當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩余生存時間時,返回 -1 。
注意:在 Redis 2.8 以前,當 key 不存在,或者 key 沒有設置剩余生存時間時,命令都返回 -1
實現緩存
為了提供網站的負載能力,需要將一個訪問頻路較高,且經過復雜計算或者IO資源消耗較大的操作的結果緩存起來,并設置一個失效時間。每次用戶訪問的時候,先檢查該鍵是否存在,如果存在直接獲取該元素并返回,如果不存在,則經過一系列計算并將結果緩存,設置失效時間,在返回給用戶
問題:
這種緩存的實現,顯然會有兩個問題,第一個是緩存都是存在內容中的,如果大量的使用緩存會導致Redis沾滿內存,另一方面,為了防止Redis沾滿內存而設置失效時間的鍵,如果設置時間太短,就可能導致緩存命中率過低并且大量內容白白浪費。
使用方式:
在開發中,很難合理的設置鍵的生存時間,所以可以限制Redis使用的最大內存,并讓Redis按照一定規則刪除一些不需要的鍵。
具體方式,修改配置文件的maxmemory參數
OS X下通過Homebrew安裝的redis的話,配置文件在/usr/local/etc/redis.conf
限制Redis最大內存之后,當超出了這個內存,會根據maxmemory-policy
指定的參數刪除不需要的鍵。當設置此參數為allkeys-lru,一旦Redis內存超過了限制值時,Redis會不斷刪除數據庫中最近最少使用的鍵,直到滿足了當前內存大小限制。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。