java 項目,要用到兩個數據結構1 {province : set<phonenumber>}2 {phonenumber: {"username": username, "status": status }}用的時候大致是時不時插入或者刪除電話號碼到1的set里(刪除要用到定時機制或者超時機制)或者根據省份查1得到集合set,然后在2里遍歷這個電話號碼的集合
單項目使用,不用和其他服務共享數據自建緩存的話要用到hashset hashmap/concurrenthashmap ,還要定時器redis的話直接用,但是用redis的性能和自建緩存比有明顯差別嗎?
10 回答

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
- 估算數據量,及數據增長趨勢,如果內存能夠承受,可以用Map,我試過往Map里放500M的數據,可以承受的
- 如果用redis,考慮網絡IO的延遲
- 不要過早優化,如果目前內存夠用,沒必要上第三方緩存,開發的時候采用接口編程,如果以后換了再換實現就行了

GCT1015
TA貢獻1827條經驗 獲得超4個贊
1.Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,redis 的性能當然比自建緩沖的性能好,畢竟 redis 是經過大量實踐和改進的,如果項目不上線,另說,你可以嘗試下
2.緩存(數據查詢、短連接、新聞內容、商品內容等等)。(最多使用)

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
如果只考慮性能,自建緩存必然比redis高效。
因為你是單應用,如果內存足夠的話自建的內存緩存(例如concurrenthashmap )完全可以滿足需求
也可以使用第三方緩存類,例如Google Guava 緩存類(不用你自己寫定時器去清除緩存)。
//Google Guava緩存的例子
Cache<String, String> cache = CacheBuilder.newBuilder()//
.expireAfterAccess(1000, TimeUnit.MILLISECONDS)//
.build();
cache.put("key1", "value");
String value = cache.getIfPresent("key1");

一只萌萌小番薯
TA貢獻1795條經驗 獲得超7個贊
要是數據量小的話,可以直接使用同步集合(避免數據不一致),因為程序級的內存使用肯定要比通過網絡請求的緩存效率高。但是問題是你的程序重啟時,你每次都要重新加載數據到內存中,還要自己寫定時任務修改數據,對于自己隨便寫的程序,可以這樣做,如果是商業程序,不建議這么做。
redis在商業程序或者數據量比較大的時候需要用的。
添加回答
舉報
0/150
提交
取消