java怎样将数据保存到缓存中,之后再保存

java怎样将数据保存到缓存中,之后再保存,第1张

Java中可以使用队列来保存数据,当使用的时候,加上锁,防止其他进程访问,当不用的时候保存到数据库里面,示例如下:

package com.henry

import java.util.HashMap

import java.util.Map

import java.util.Random

import java.util.concurrent.locks.ReadWriteLock

import java.util.concurrent.locks.ReentrantReadWriteLock

public class CacheDataTest {

 static Map<Integer,Object> dataMap=new HashMap<Integer,Object>()

 static ReadWriteLock lock=new ReentrantReadWriteLock()//创建读写锁的实例

 static Object getData(Integer key){

  lock.readLock().lock()//读取前先上锁

  Object val=null

  try{

   val=dataMap.get(key)

   if(val == null){

    // Must release read lock before acquiring write lock

    lock.readLock().unlock()

    lock.writeLock().lock()

    try{

     //可能已经由其他线程写入数据

     if(val==null){

      //dataMap.put(key, "")//query from db

      val=queryDataFromDB(key)

     }

    }finally{

     //Downgrade by acquiring read lock before releasing write lock

     lock.readLock().lock()

     // Unlock write, still hold read

     lock.writeLock().unlock()

    }

   }

  }finally{

   lock.readLock().unlock()//最后一定不要忘记释放锁

  }

  System.out.println("get data key="+key+">val="+val)

  return val

 }

 

 static Object queryDataFromDB(Integer key){

  Object val=new Random().nextInt(1000)

  dataMap.put(key, val)

  System.out.println("write into data key="+key+">val="+val)

  return val

 }

 

 public static void main(String[] args) {

  for(int i=0i<10i++){

   new Thread(new Runnable(){public void run() {

    getData(new Random().nextInt(5))

   }}).start()

  }

 }

}

根据你的想法,建议将两种方式整合下,建议如下设置:

根据业务层的需要,把频繁使用的多个表数据进行整合,并利用视图的方式进行访问,这样既能减少数据表的压力,也能保持数据的准确性;

根据向系统设定场景,将经常使用到的数据存放在缓存中,缓存建议使用radis等非关系型数据库;

根据数据量确定,数据量比较大的,可以使用中间表等方式,如果数据量小而多的,放在缓存中最好,提高命中率。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9565164.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存