斑竹前两天看了别人的一篇舍得网开发心得后对数据库缓存技术颇感兴趣。
想请教一下你有没有相关的学习文档,资料或者算法什么的给我参考。
拜托了。

解决方案 »

  1.   

    Hibernate 自己就支持缓冲。你可以自己配置缓冲的方法,比如用 ehcache等。
      

  2.   

    那除了hibernate别的还有吗?
    刚刚在网上找到一个别人写的数据库缓存的算法看不太明白。
    你要是有这方面的资料提供一下。多谢了啊
      

  3.   

    楼主如真想研究数据库缓存技术的话就看Oracle的缓存处理
      

  4.   

    hibernate的想精通就很复杂了....
    你是不屑还是不满足?
    1级和2级讲起来简单,真用到了,大多都爆掉....郁闷额...
      

  5.   

    在网上找的,不知道对你有没有帮助。
    数据库缓存算法:
    适用条件:
       1,数据库记录访问极度频繁,但更新很少。
       2,数据库记录很大,但所需数据却很少。
    编程思想:
    由两个线程来处理
    线程1:每N小时扫描一次数据库,把符合条件的数据取出,放入缓存
    线程2:实时扫描缓存对像,取出符合条件的记录处理。
    实现程序代码:
    public class PipedStreamDemo {
    /**
     * @author 黄越勇
     * @create date 2007-6-27
     */
     public static void main(String[] args) {
    //主方法,不想多说了。
      PipedOutputStream pos = new PipedOutputStream();
      PipedInputStream pis = new PipedInputStream();
      try {
       pos.connect(pis);
       new Producer(pos).start();
       new Customer(pis).start();
      } catch (IOException e) {   
       e.printStackTrace();
      }
     }
    }
    /******************************************************************************
     * ****************************************************************************
     * ******** 生产者线程,修改以下代码,把从数据库里取出来的数据以对象的形式存起来。
     * ****************************************************************************
     */
    class Producer extends Thread {
     private PipedOutputStream pos;
     public Producer(PipedOutputStream pos) {
      this.pos = pos;
     }
     public synchronized void run() {
      try {
        
                       /* 将对象写到一个文件里 这个很重要,相当于缓存*/
                    File f=new File("myvector.obj");
                    if(!f.exists())f.createNewFile();
                       FileOutputStream objfile = new FileOutputStream(f);
                       /* 创建一个输出流 */
                       ObjectOutputStream p = new ObjectOutputStream(objfile);
                       /* 创建一个TestVector对象 */
                       VectorList tv =new VectorList();
                       /*给Vector写入几String个对象*/
                       tv.add("One");
                       tv.add("Two");
                       tv.add("Three");
                       p.writeObject(tv); // 把tv写入流
                       p.flush();
                       objfile.close();    // 关闭文件对象
       
       //pos.write("hello thank you for welcome!".getBytes());
       pos.close();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    }
    /******************************************************************************
     * ****************************************************************************
     * ********消费者, 把内容还原就可以用了                                      ********
     * ****************************************************************************
     */
    class Customer extends Thread {
     private PipedInputStream pis;
     public Customer(PipedInputStream pis) {
      this.pis = pis;
     }
     public synchronized void run() {
      try { 
        sleep(1000);     //缓冲一下,很重要,管道流里没水的话,后果很严重
        FileInputStream objfile = new FileInputStream("myvector.obj");
                 ObjectInputStream q = new ObjectInputStream(objfile);
                 /* 获取对象原始数据 */
                 
                 VectorList myvector = (VectorList)q.readObject();
                 if(myvector.size()>0)myvector.print(); 
       pis.close();
       
      } catch (IOException e) {
       
       e.printStackTrace();
      } catch (ClassNotFoundException e) {
       
       e.printStackTrace();
      } catch (InterruptedException e) {
       
       e.printStackTrace();
      }
     }
    }
    /*******************************************************************************
     * *****************************************************************************
     * ******** 构造一个序列化的Vector对象以保存数据库数据   ********
     * *****************************************************************************
     */
    class VectorList implements Serializable{
     private Vector vect=new Vector();
        
        public void add(Object obj){
                this.vect.add(obj);
        }
        public void print(){
                System.out.println(this.vect);
        }
     public Object get(int index) {
             return this.vect.get(index);
     }
        public int size(){
         return vect.size();
        } 
    }