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