本文目录一览:
java怎样将数据保存到缓存中,之后再保存
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 MapInteger,Object dataMap=new HashMapInteger,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=0;i10;i++){
new Thread(new Runnable(){public void run() {
getData(new Random().nextInt(5));
}}).start();
}
}
}
哪位了解java数据缓存技术有哪些
一、什么是缓存
1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问
2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache
常见的缓存技术有哪些?
一、操作系统缓存
1、文件系统提供的Disk Cache:操作系统会把经常访问到的文件内容放入到内存当中,由文件系统来管理
2、当应用程序通过文件系统访问磁盘文件的时候,操作系统从Disk Cache当中读取文件内容,加速了文件读取速度
3、Disk Cache由操作系统来自动管理,一般不用人工干预,但应当保证物理内存充足,以便于操作系统可以使用尽量多的内存充当Disk Cache,加速文件读取速度
4、特殊的应用程序对文件系统Disk Cache有很高的要求,会绕开文件系统Disk Cache,直接访问磁盘分区,自己实现Disk
5、Cache策略
Oracle的raw device(裸设备) – 直接抛弃文件系统
MySQL的InnoDB: innodb_flush_method = O_DIRECT
二、数据库缓存
缓存策略:a、Query Cache; b、Data Buffer
三、应用程序缓存
包括对象缓存、查询缓存、页面缓存
四、web服务器端缓存
基于代理服务器模式的Web服务器端缓存,如squid/nginx
Web服务器缓存技术被用来实现CDN(内容分发网络 content delivery network)
被国内主流门户网站大量采用
不需要编程,但仅限于新闻发布类网站,页面实时性要求不高
五、基于ajax的浏览器缓存
使用AJAX调用的时候,将数据库在浏览器端缓存
只要不离开当前页面,不刷新当前页面,就可以直接读取缓存数据
只适用于使用AJAX技术的页面
请教java中怎么缓存大量的数据,比如100w条记录
小子,解决问题的思路首先就不对,什么叫JAVA中……JVM虚拟内存一般只有几百M,为何别人那么多大型系统都能跑起来?
第一,大量的数据是不会考虑放在JVM内存中;
第二,如果需要缓存大量的dto,动态数据(又称过程数据)一般用的是redis;如果是静态,系统启动时就加载的大量配置,一般考虑放ehcache。
第三,由于redis用的是物理内存,不是JVM内存,一般情况下往redis里丢千万级别的记录数基本不影响性能,小小100w条算什么呢。
java怎么将数据放入缓存
java放入session缓存中
方法如下:
session.setAttribute("Name",Value);
Name 随便取,value就是要放的数据
获取的时候session.getAttribute("Name);
就可以了