當前位置:首頁 » 硬碟大全 » java如何把變數放到緩存
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java如何把變數放到緩存

發布時間: 2022-05-18 23:29:59

㈠ 請教java中怎麼緩存大量的數據,比如100w條記錄

小子,解決問題的思路首先就不對,什麼叫JAVA中……JVM虛擬內存一般只有幾百M,為何別人那麼多大型系統都能跑起來?
第一,大量的數據是不會考慮放在JVM內存中;
第二,如果需要緩存大量的dto,動態數據(又稱過程數據)一般用的是redis;如果是靜態,系統啟動時就載入的大量配置,一般考慮放ehcache。
第三,由於redis用的是物理內存,不是JVM內存,一般情況下往redis里丟千萬級別的記錄數基本不影響性能,小小100w條算什麼呢。

㈡ java 怎麼把數據存到內存中

這里你採納與否沒關系,給你說說編程與內存的關系。
你定義的任何變數,常量,類,方法等等,其實都在內存中,沒有所謂的把數據存內存中,這概念,你可以想一下電腦重啟或關機後,內存中的所有數據,都會丟失,除非你保存到磁碟中去。
在內存中的數據有兩塊,第一、緩沖,一般寫數據到磁碟的時候開辟出來的內存空間;第二、緩存,一般是從磁碟讀數據到內存中開辟出來的內存空間。會這么使用,原因很簡單,磁碟讀寫數據速度與內存不一致(磁碟的存取效率遠遠小於內存的存取效率),為了提高數據的存取效率,才會這么乾的。
一般而言,java中的所謂數據,大部分都是類,從自動引用計數的概念來分析,你想把對象長久的放在內存中,不會被垃圾回收機制釋放,注意制葯有一個對象在使用/引用你的數據,這條數據就會存在內存中。所以,想servlet中的全局配置參數,隨時可以取到還是唯一一份,你可以參考一下。
另外內存使用分堆與棧,堆在面向對象編程中存儲對象的,棧是方法或函數執行的時候臨時開辟的存儲空間,方法或函數執行完畢就會釋放。
希望我的回復能幫助到你,採納與否沒關系。有更好的答案,我就隱藏我的回復。

㈢ java怎麼使用redis進行mysql數據的緩存

方法有很多
其中之一
實時獲取mysql
binlog進行解析
然後修改redis
MySQL到Redis數據方案
無論MySQL還是Redis
自身都帶有數據同步的機制,像比較常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog來實現的,這樣的數據其實還是一個非同步過程,只不過當伺服器都在同一內網時,非同步的延遲幾乎可以忽略
那麼理論上我們也可以用同樣方式,分析MySQL的binlog文件並將數據插入Redis。但是這需要對binlog文件以及MySQL有非常深入的理解,同時由於binlog存在Statement/Row/Mixedlevel多種形式,分析binlog實現同步的工作量是非常大的。
因此這里選擇了一種開發成本更加低廉的方式,借用已經比較成熟的MySQL
UDF,將MySQL數據首先放入Gearman中,然後通過一個自己編寫的PHP
Gearman
Worker,將數據同步到Redis

㈣ java怎麼將數據放入緩存

java放入session緩存中
方法如下:

session.setAttribute("Name",Value);
Name 隨便取,value就是要放的數據
獲取的時候session.getAttribute("Name);
就可以了

㈤ java怎樣將數據保存到緩存中,之後再保存

Java中可以使用隊列來保存數據,當使用的時候,加上鎖,防止其他進程訪問,當不用的時候保存到資料庫裡面,示例如下:

packagecom.henry;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Random;
importjava.util.concurrent.locks.ReadWriteLock;
importjava.util.concurrent.locks.ReentrantReadWriteLock;

publicclassCacheDataTest{
staticMap<Integer,Object>dataMap=newHashMap<Integer,Object>();
staticReadWriteLocklock=newReentrantReadWriteLock();//創建讀寫鎖的實例
staticObjectgetData(Integerkey){
lock.readLock().lock();//讀取前先上鎖
Objectval=null;
try{
val=dataMap.get(key);
if(val==null){
//
lock.readLock().unlock();
lock.writeLock().lock();
try{
//可能已經由其他線程寫入數據
if(val==null){
//dataMap.put(key,"");//queryfromdb
val=queryDataFromDB(key);
}
}finally{
//
lock.readLock().lock();
//Unlockwrite,stillholdread
lock.writeLock().unlock();
}
}
}finally{
lock.readLock().unlock();//最後一定不要忘記釋放鎖
}
System.out.println("getdatakey="+key+">val="+val);
returnval;
}

staticObjectqueryDataFromDB(Integerkey){
Objectval=newRandom().nextInt(1000);
dataMap.put(key,val);
System.out.println("writeintodatakey="+key+">val="+val);
returnval;
}

publicstaticvoidmain(String[]args){
for(inti=0;i<10;i++){
newThread(newRunnable(){publicvoidrun(){
getData(newRandom().nextInt(5));
}}).start();
}
}
}

㈥ java怎麼將資料庫的數據做緩存,方便查找。

內存資料庫有現成的redis,高效存取鍵值對,鍵設為你的查詢條件,值設為你的查詢結果轉為字元串 查詢時先從redis取,沒有再查資料庫,並且設置redis的過期時間,這種方式需要項目對實時性要求不高,這樣你才能用緩存,而且如果你的項目沒有明顯java怎麼將資料庫的數據做緩存,方便查找。

㈦ java如何將1個list存入緩存中並在緩存在修改數據

publicclassTest2{

publicstaticvoidmain(String[]args){
try{
List<String>list=newArrayList<>();
//模擬傳過來的值
inti=0;
while(true){
Longtime=newDate().getTime();
//將當前時間與值拼接成字元串保存到list
list.add("value"+i+","+time);
//調用處理方法
processing(list);
i++;
//模擬每次傳入的時間長度
Thread.sleep(3000);
}
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidprocessing(List<String>list){
//第一個存入的值
Stringsrc1=list.get(0);
//最後一個存入的值
Stringsrc2=list.get(list.size()-1);
//通過轉換成數組
String[]c1=src1.split(",");
String[]c2=src2.split(",");
//拿到第一個存入的時間字元串轉換成Long
Longl1=Long.parseLong(c1[1]);
//拿到最新的時間字元串轉換成Long
Longl2=Long.parseLong(c2[1]);
//如果大於等於30000毫秒就說明了過了30秒清空
if((l2-l1)>=30000){
list.clear();
}
System.out.println("每次的值"+src2);
System.out.println("是否30秒清空"+(list.size()==0));
}
}


/*******************************第二種方式*************************************/

publicclassTest2{
//定義一個全局變數用於接收時間
privatestaticLongtime=0L;
publicstaticvoidmain(String[]args){
try{
List<String>list=newArrayList<>();
//模擬傳過來的值
inti=0;
while(true){
//如果list是在清空狀態那麼就創建個時間為第一次時間
if(list.size()==0){
time=newDate().getTime();
}
//將字元串保存到list
list.add("value"+i);
//調用處理方法,沒次傳入一個當前存入對象的時間
processing(list,newDate().getTime());
i++;
//模擬每次傳入的時間長度
Thread.sleep(3000);
}
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidprocessing(List<String>list,Longtimes){
//當前時間-第一次存入的時間大於等於30000毫秒
//就是過了30秒執行清空操作
if((times-time)>=30000){
list.clear();
}
for(Stringls:list){
System.out.println("每次的值"+ls);
}
System.out.println("是否30秒清空"+(list.size()==0));
}
}

我沒有redis 只能模擬一個 你看下 其實 你就多了一步 從緩存中取值 判斷不能 等於 30000毫秒 因為 時間會有所偏差 可能大於 所以 大於等於,你要是覺得 毫秒太長你可以 轉換成秒存入 在計算


第二種 的話 你的程序 可能不需要太大改掉

㈧ java中如何把數據放入session緩存中

session.setAttribute("Name",Value);
Name 隨便取,value就是你要放的數據
獲取的時候session.getAttribute("Name);
就可以了

㈨ java如何將從資料庫取出的數據預先存入到內存

你要實現的這個可能跟SpringMvc的關系不是很大。
你要達到的目的其實就是在jvm啟動的時候把資料庫數據載入一份到內存,一個靜態變數和一個靜態初始化塊就可以搞定你的問題,這兩者都是在類載入的時候初始化一次,像前面回答的一樣,你可以用一個HashMap搞定。稍微具體來說,一個靜態變數
public static final Map<key,value> cache=new HashMap<key,value>()
static {
cache=請求資料庫操作
}

key你自己加,String還是int都行,value是你資料庫的結構,可以寫個實體。獲取的時候直接cache.get(key)就可以了。