redis 计数器 java_Redis 实践汇总和使用建议。
↑ 點擊上面 “時代Java”關注我們,
關注新技術,學習新知識!
一、概述
Redis是一個開源的、基于內存的結構化存儲媒介,可用作數據庫、緩存、消息中間件。
它支持strings、hash、set、list、sorted set、bitmaps、hyperloglogs、geo數據結構。
另外,Redis還提供了如下的功能:
支持鍵過期,可以用來實現緩存系統
提供發布訂閱功能,用來實現消息系統
提供簡單的事務功能,在一定程度上保證事務特性
提供pipeline,支持一次將多個命令請求發送到服務端,相比較一個命令一個命令執行,減少了網絡開銷的時間
支持內存數據持久化至硬盤(RDB或者AOF)
1主N(N>=1)從模式下的高可用解決方案Sentinel
3.0+ 以上版本提供的分布式redis cluster
Redis使用場景
緩存
幾乎所有的大型系統都會用到緩存,合理地使用緩存不僅可以加速數據的訪問速度,同時也可以降低后端數據源的壓力。
計數器應用
比如說某些網站需要對一篇文章的閱讀量需要進行計數,參照數據結構:incr/incrby(原子性).
獲取最新N條數據
比如獲取某用戶最新發布的N條文章,這個時候就可以考慮使用redis,參照數據結構:List(lpush+ltrim).
排行榜
基于不同維度的數據的排序,參照數據結構sortedset和list .
隊列系統
Redis高性能揭秘
單線程結構,避免了多線程環境下的線程間切換(當然單線程也有弊端,自己思考下)
基于epoll的IO多路復用模型,將網路上的可讀、可寫等事件轉化成了內部的FileEvent事件
純內存訪問
數據結構及常用命令
首先,Redis 針對 strings、list、set、zset、hash 這5種數據結構每種結構底層都對應有至少2種以上的內部編碼實現,這樣做一來是為了方便內部編碼重構時不會影響外部數據結構的操作,另一方面是在鍵對應的數據量較小時節省內存。
命令結構如下:
二、使用建議
鍵命名規范化
關于鍵命名的定義,大眾推薦使用“[業務名]:對象名:id:[屬性]’’,切勿盲目遵守該約定導致鍵名太長,在該約定基礎上,保證鍵名含義清晰的情況下盡可能的短。
冷熱數據分離
建議將高頻熱數據存儲在Redis中,對于一些不太經常訪問的數據可以存儲在mysql等使用硬盤的存儲媒介中。
不同業務的數據分開存儲
redis默認有16個db,可以將不同業務的數據存儲在不同的db中,或者部署多組不同的redis來提供給不同業務使用。
當緩存用時設置過期時間
redis做緩存用時,給key設置過期時間,過期時間根據實際業務進行評估,切勿隨意給一個很長的時間。
大value建議壓縮后存儲
實際使用中,如果碰到一些無法進行數據結構拆分的大key不得不存儲在redis中時,建議對這類value進行壓縮后存儲。
避免生產環境使使用keys等耗時命令
在數據量keys比較多的情況下,執行keys命令會在一段時間內阻塞redis,這樣導致其他命令的請求處理超時,尤其是在高OPS的情況下更要避免使用該類操作。
謹慎使用Hash、Set、SortedSet數據結構的全量操作
例如,對于hgetall操作,當hash中只有幾十個或者幾百個field的時候,hgetall的響應時間很快,完全可以滿足業務低延遲的需求,但是當field數增長到到幾萬個或者幾十萬個的時候,這個時候再去執行hgetall響應時間勢必會增加。
合理使用pipeline
一次set操作的響應時間=請求網絡傳輸時間+請求排隊時間+server處理時間+響應網絡傳輸時間,那么10次set的響應時間則為10次請求網絡傳輸時間+請求排隊時間+server端命令處理時間+10次響應網絡傳輸時間,但是當使用pipeline時,10次set請求封裝成一次網絡請求到server端,同理響應也是一次網絡傳輸,節省了大量的RTT(這里只是舉例,多個值的set 操作redis默認有支持,可自己查看官方文檔)。
三、實踐資料
Windows安裝Redis,使用MSI安裝包方式安裝。
Redis 事務和事務命令
Java 連接 Redis 工具包之 Jedis 的單例模式用法,非常好用哦~~
或點擊進入時代Java網站查詢更多Redis資料。
--
知識分享,時代前行!
~~ 時代Java
還有更多好文章……
請查看歷史文章和官網,
點擊閱讀詳細。
總結
以上是生活随笔為你收集整理的redis 计数器 java_Redis 实践汇总和使用建议。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8客户端安装后无法启动_新君越涉水后车辆
- 下一篇: linux cmake编译源码,linu