本文记录:Hibernate中一级缓存的特点。

一级缓存的细节什么操作会向一

1.级缓存放入数据

save,update,saveOrUpdate,load,get,list,iterate,lock

2.什么操作会从一级缓存取数据。
get / load / list

get / load 会首先从一级缓存中取,如没有,再有不同的操作[get 会立即向数据库发请求,而load 会返回一个代理对象,直到用户真的去使用数据,才会向数据库发请求。
?list 会不会从session缓存取数据?

3.一级缓存不需要配置,就可以使用,它本身没有保护机制,所以我们程序员要考虑这个问题,我们可以同 evict 或者 clear来清除session缓存中对象。

evict 是清除一个对象,clear是清除所有的sesion缓存对象

4.session级缓存中对象的生命周期, 当session关闭后,就自动销毁.

5.自己用HashMap来模拟一个Session缓存,加深对缓存的深入。

package dome;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class MyCache {
// 使用map来模拟缓存
static Map<Integer, Student> maps = new HashMap<Integer, Student>();
public static void main(String[] args) {
// TODO Auto-generated method stub getStudent(1);
getStudent(1);
getStudent(1);
getStudent(1);
getStudent(3);
getStudent(3); } public static Student getStudent(Integer id) { // s.get() // 先到缓存去
if (maps.containsKey(id)) {
// 在缓存有
System.out.println("从缓存取出");
return maps.get(id);
} else {
System.out.println("从数据库中取");
// 到数据库取
Student stu = MyDB.getStudentFromDB(id);
// 放入缓存
maps.put(id, stu);
return stu;
} } } // 我的数据库
class MyDB { static List<Student> lists = new ArrayList<Student>(); // 初始化数据库,假设有三个学生
static {
Student s1 = new Student();
s1.setId(1);
s1.setName("aaa");
Student s2 = new Student();
s2.setId(2);
s2.setName("bbb");
Student s3 = new Student();
s3.setId(3);
s3.setName("ccc");
lists.add(s1);
lists.add(s2);
lists.add(s3); } public static Student getStudentFromDB(Integer id) {
for (Student s : lists) {
if (s.getId().equals(id)) {
return s;
}
}
return null;// 在数据库中没有. }
} class Student {
private Integer id;
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

自己用HashMap来模拟一个Session缓存(简易版)的更多相关文章

  1. 用select模拟一个socket server成型版2

    1.字典队列测试 import queue msg_dic={} msg_dic[1]=queue.Queue() msg_dic[1].put('hello') msg_dic[1].put('bo ...

  2. 用select模拟一个socket server成型版

    1.你往output里面放什么,下次循环就出什么.  2. 1.服务器端:实现了收和发的分开进行 import select,socket,queue server=socket.socket() s ...

  3. mybatis学习笔记(14)-查询缓存之中的一个级缓存

    mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...

  4. Java模拟并解决缓存穿透

    什么叫做缓存穿透 缓存穿透只会发生在高并发的时候,就是当有10000个并发进行查询数据的时候,我们一般都会先去redis里面查询进行数据,但是如果redis里面没有这个数据的时候,那么这10000个并 ...

  5. ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存

    前言 上篇博文介绍了怎么样在 asp.net core 中使用中间件,以及如何自定义中间件.项目中刚好也用到了Redis,所以本篇就介绍下怎么样在 asp.net core 中使用 Redis 进行资 ...

  6. hibernate笔记--缓存机制之 一级缓存(session缓存)

    一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询i ...

  7. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

  9. [转]session缓存机制和三种对象状态

    摘自 http://blog.csdn.net/csh624366188/article/details/7612142 Hibernate 的Session就是其中的一个,它提供了基本的增,删,改, ...

随机推荐

  1. DB2日常维护常用命令

    1.检查是否有僵尸进程 ps -emo THREAD | grep -i Z | grep -i 实例名 2.处理死锁  --第一步:查看所有死锁  db2 get snapshot for lock ...

  2. day16_雷神_前端04

    前端day04 链接前端的一些库,一些资源,从bootcdn上搜,有前端所有的库. 前端工作流程: jquery的DOM文档操作 <!DOCTYPE html> <html lang ...

  3. struts2 简单注解配置代替xml配置文件

    1. 主要文件 LoginAction.javapackage com.edu.struts2.action;import org.apache.struts2.convention.annotati ...

  4. Java开发面试题,3年工作经验的Java程序员面试经

    一.Java基础部分 1.使用length属性获取数组长度,public.private.protected.friendly区别 2.Collection和Collections区别 3.Strin ...

  5. 关于Python打开IDLE出现错误的解决办法

    安装好python,打开IDLE出现以下错误: 解决办法: 修改[Python目录]\Lib\idlelib\PyShell.py文件,在1300行附近,将def main():函数下面use_sub ...

  6. Java初学者最佳的学习方法以及会遇到的坑(内含学习资料)!

    最近系统整理了一套java初学者最佳的学习方法以及会遇到的坑等,希望对你有所帮助. 目录: 一.学习java的前提 二.学习java的方法 三.学习java时的坑 四.学习java的路线(画重点) 一 ...

  7. 每天学点SpringCloud(十四):Zipkin使用SpringCloud Stream以及Elasticsearch

    在前面的文章中,我们已经成功的使用Zipkin收集了项目的调用链日志.但是呢,由于我们收集链路信息时采用的是http请求方式收集的,而且链路信息没有进行保存,ZipkinServer一旦重启后就会所有 ...

  8. java,让debug出色

    虽然我们不喜欢bug,但是bug永远都存在.虽然我们牛逼,但是仍然有不知道的东西,解决不了的问题.so,还得借助工具,让咱效率提起来扛扛的.解决的问题如是:由于某种原因,其他系统发送的mq,我这边说没 ...

  9. docker安装及配置

    docker下载安装(官方) 卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker- ...

  10. RISC-V踩坑记----__builtin_clz((x)库函数的应用

    RISC-V的确是个好东西,可是,免费的东西往往需要付出代价才能得到了,最近遇到了一个算法中的问题,追了好久,最终追到了这个库函数中,没想到,这个库函数居然还隐藏着一些猫腻.值得记下来啊. 首先上一个 ...