保存时需检查缓存中的数据在数据库中如果没有就就添加,有就更新,原来有而现在没有的就删除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存时需检查缓存中的数据在数据库中如果没有就就添加,有就更新,原来有而现在没有的就删除相关的知识,希望对你有一定的参考价值。

在数据库中根据id查询数据是否存在,如果存在就更新,不存在就添加,请问最后一问怎么判断,怎么删除原来有,现在要保存进去的没有?

参考技术A “select id from数据表 where id=”&id判断记录集是否为空,为空则添加,否则则更新,检查一下sql语句是否有问题 参考技术B 是不是php语言,如果是,这个很简单的。
<?php
//你自己保存$id变量

$res=mysql_query("select * from table where id=$id");
//查询有没有对应的数据库
if(mysql_num_rows($res) >0)

//如果存在。。你自己写更新


else
//否则,插入

//...自己写插入

?>追问

不是,asp.net 原来有而现在没有的就删除要怎么判断?

追答

一样的

虽然我不学APS.net,但是编程思路是一样的,你可以自己去查查函数:
你要只要执行了数据库语句,获得结果的行数,如果大于0,就执行更新
否则就添加

删除原有啊?
你还是判断,(一样先查询)如果大于0 删除后添加(如果你但担心添加不上去,你可以判断添加执行的语句,如果成真就是添加成功,否则就是添加失败,删除你也可以判断。)
否则就是直接添加

查询缓存

将上一次的查询结果保存在内存中,后面如果是相同的查询,就不再去数据库查询,到内存中获取数据。如果中间进行了增、删、改,需要清空缓存中的数据。

好处:

提高查询速度,减小数据库服务器压力

Mybatis中的查询缓存:

一级查询缓存

如果使用的是同一个SqlSession对象中【没有被关闭过close()】,执行了多次相同的查询语句,第一次查询后会将结果保存到内存中,后面相同的查询会从内存中直接获取数据,而不再去数据中查询,提高查询速度。

当一个SqlSession对象被关闭后,该SqlSession的上一次查询结果缓存中就不存在了。

Mybatis中一级缓存默认就是开启状态,不需要手动启动,而且不能够进行关闭。

一级缓存的验证:

用同一个SqlSession对象执行相同的方法,控制台只有一次查询

技术图片

 

 

控制台

技术图片

 

 

如果使用的不同的SqlSession对象,那么不使用缓存

技术图片

 

 

如果使用的是同一个SqlSession对象,但是中间出现了增删改操作,缓存也不起作用

技术图片

 

 

结果

技术图片

 

 

二级查询缓存

二级缓存与一级缓存,一级缓存当SqlSession关闭,则缓存数据不再存在,二级缓存的缓存数据与SqlSession对象无关。二级缓存延长缓存数据的保存时间。

使用

对查询语句中涉及到的实体类必须实现序列化接口

技术图片

 

 

在对应的映射文件中的mapper标签中添加cache子标签

技术图片

 

 

验证二级缓存的作用

使用的是不同的SqlSession对象

技术图片

 

 

执行结果

技术图片

 

 验证增删改对二级缓存的影响

技术图片

 

 

二级缓存在有增删改的时候会自动清空缓存,到数据库查找。

以上是关于保存时需检查缓存中的数据在数据库中如果没有就就添加,有就更新,原来有而现在没有的就删除的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate中一级缓存概念以及flush与clear的区别

ats缓存规则

休眠保存或更新行为

查询缓存

检查 USB 内容

将对象缓存到android(kotlin)中的文件