redis常见应用场景
什么是Redis
?
Redis是由意大利人Salvatore Sanfilippo(網名:antirez)開發的一款內存高速緩存數據庫。Redis全稱為:Remote Dictionary Server(遠程數據服務),該軟件使用C語言編寫,Redis是一個key-value存儲系統,它支持豐富的數據類型,如:string、list、set、zset(sorted set)、hash。
Redis采用的是基于內存的采用的是單進程單線程模型的KV數據庫,由C語言編寫。官方提供的數據是可以達到100000+的qps
?
Redis單線程好處
?
代碼更清晰,處理邏輯更簡單
不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗
不存在多進程或者多線程導致的切換而消耗CPU
所以redis線程是安全的
?
單進程單線程弊端
無法發揮多核CPU性能,不過可以通過在單機開多個Redis實例來完善;
?
Redis應用場景
?
令牌(Token)生成
短信驗證碼
發布訂閱
相當于消息系統,ActiveMQ,RocketMQ等工具類似,但是個人覺得簡單用一下還行,如果對于數據一致性要求高的話還是用RocketMQ等專業系統。
由于redis把數據添加到隊列是返回添加元素在隊列的第幾位,所以可以做判斷用戶是第幾個訪問這種業務
隊列不僅可以把并發請求變成串行,并且還可以做隊列或者棧使用
分布式鎖
?
驗證前端的重復請求(可以自由擴展類似情況),可以通過redis進行過濾:每次請求將request Ip、參數、接口等hash作為key存儲redis(冪等性請求),設置多長時間有效期,然后下次請求過來的時候先在redis中檢索有沒有這個key,進而驗證是不是一定時間內過來的重復提交
秒殺系統,基于redis是單線程特征,防止出現數據庫“爆破”
全局增量ID生成,類似“秒殺”
計數器
諸如統計點擊數等應用。由于單線程,可以避免并發問題,保證不會出錯,而且100%毫秒級性能!
緩存(熱點數據)
熱點數據(經常會被查詢,但是不經常被修改或者刪除的數據),首選是使用redis緩存,畢竟強大到冒泡的QPS和極強的穩定性不是所有類似工具都有的,而且相比于memcached還提供了豐富的數據類型可以使用,另外,內存中的數據也提供了AOF和RDB等持久化機制可以選擇,要冷、熱的還是忽冷忽熱的都可選。
結合具體應用需要注意一下:很多人用spring的AOP來構建redis緩存的自動生產和清除,過程可能如下:
Select 數據庫前查詢redis,有的話使用redis數據,放棄select 數據庫,沒有的話,select 數據庫,然后將數據插入redis
update或者delete數據庫錢,查詢redis是否存在該數據,存在的話先刪除redis中數據,然后再update或者delete數據庫中的數據
上面這種操作,如果并發量很小的情況下基本沒問題,但是高并發的情況請注意下面場景:
為了update先刪掉了redis中的該數據,這時候另一個線程執行查詢,發現redis中沒有,瞬間執行了查詢SQL,并且插入到redis中一條數據,回到剛才那個update語句,這個悲催的線程壓根不知道剛才那個該死的select線程犯了一個彌天大錯!于是這個redis中的錯誤數據就永遠的存在了下去,直到下一個update或者delete。
總結
以上是生活随笔為你收集整理的redis常见应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用rmi实现ehcache集群模式
- 下一篇: 使用redis实现订阅功能