4 回答

TA貢獻1804條經(jīng)驗 獲得超2個贊
解決問題的思路首先就不對,什么叫JAVA中……JVM虛擬內(nèi)存一般只有幾百M,為何別人那么多大型系統(tǒng)都能跑起來?
第一,大量的數(shù)據(jù)是不會考慮放在JVM內(nèi)存中;
第二,如果需要緩存大量的dto,動態(tài)數(shù)據(jù)(又稱過程數(shù)據(jù))一般用的是redis;如果是靜態(tài),系統(tǒng)啟動時就加載的大量配置,一般考慮放ehcache。
第三,由于redis用的是物理內(nèi)存,不是JVM內(nèi)存,一般情況下往redis里丟千萬級別的記錄數(shù)基本不影響性能,小小100w條算什么呢。

TA貢獻2021條經(jīng)驗 獲得超8個贊
內(nèi)存數(shù)據(jù)庫有現(xiàn)成的redis,高效存取鍵值對,鍵設(shè)為你的查詢條件,值設(shè)為你的查詢結(jié)果轉(zhuǎn)為字符串
查詢時先從redis取,沒有再查數(shù)據(jù)庫,并且設(shè)置redis的過期時間,這種方式需要項目對實時性要求不高,這樣你才能用緩存,而且如果你的項目沒有明顯的熱點,即沒有某些內(nèi)容確定會多次被查到,那你緩存就不會命中,添加緩存反而影響你得速度
redis是一種nosql的內(nèi)存數(shù)據(jù)庫,感興趣你可以了解一下,優(yōu)點就是性能強勁
數(shù)據(jù)查詢請求多就把結(jié)果緩存下來,你查數(shù)據(jù)庫再快也沒有直接把結(jié)果從內(nèi)存讀出來快
同樣的sql請求只有第一次查數(shù)據(jù)庫,之后通通讀內(nèi)存
或者你干脆借助這種思想,創(chuàng)建一個全局的map對象,然后查詢條件作key
,結(jié)果作value,就省去了了解redis的過程,把整個數(shù)據(jù)庫裝內(nèi)存不太科學(xué),你有多少條數(shù)據(jù)啊

TA貢獻2051條經(jīng)驗 獲得超10個贊
在applicationContext.xml里設(shè)置數(shù)據(jù)源
<!-- 數(shù)據(jù)源定義,使用Apache DBCP 連接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
寫入具體值就可以了
applicationContext.xml中還有一段相關(guān)的:
<!-- 初始化ibatis配置信息sqlMapClient -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:cn/com/pp/db/SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>

TA貢獻1825條經(jīng)驗 獲得超6個贊
map由key value鍵值對組成,具體放多少數(shù)據(jù)和你的服務(wù)器運行時的內(nèi)存有關(guān)系,同時也和你代碼中及時清理無效緩存有關(guān)系。
一般編寫代碼中不會去考慮放多少數(shù)據(jù)問題,除非你數(shù)據(jù)量超級大對內(nèi)存要求比較高。這個時候需要對代碼和服務(wù)器進行優(yōu)化
添加回答
舉報