我想问RAM删除数据是通过覆盖还是直接删除的,如果是前者的话手机的RAM的数据还可以恢复吗,电脑在没关闭电源前,关闭进程比方说关掉浏览器,那之前浏览的数据是真的被删除了,还是内存只是将他们标记为可用。本人初学,很多东西不懂,勿喷。
作为开发,如果不了解缓存,那么你一定知道数据库,为什么会有缓存的出现?其实很简单,数据库的读写是基于磁盘IO的,数据库的性能,极大程度由你服务器的磁盘性能,硬件性能决定,目前数据库在软件层面的优化,已经做到了很不错了,但是你硬件
跟不上,最终的下场就是GG,而面对目前互联网的流量越来越大,对数据库的要求,还是只能满足软件层面,硬件的成本太高,所以大部分的企业是无法承担这样的费用,业务越来越复杂,对数据库的读写压力会越来越大,撑不住会经常打挂几台,集群有时
也扛不住,怎么办呢?
那么缓存就出来了,挡在数据库的前面,洪峰流量先走缓存,抗住一波后,再根据业务走数据库;市面上有很多缓存,比如Redis,Memcache等等,这些都是基于内存模型的,学过计算机的都知道,内存的读写速度要大于磁盘的读写速度。
所以内存的读写一定要快的多,这样也就降低了数据库压力,降低系统的瓶颈。
虽然缓存出现了,带来极大的好处,同时给业务上带来了额外的问题。
比如有
- 数据库和缓存数据不一致,业界称为双写不一致
- 缓存数据一大批集体失效,导致流量一瞬间直接打到数据库上,给数据库服务打挂了,这个现象业界称为缓存雪崩
- 缓存和数据库中,都不存在某个数据,但是用户恶意攻击频繁请求一些大字段,大返回结果,以及不存在的数据,导致数据库压力过大而挂掉,这个业界称为缓存穿透
- 缓存中某条数据不存在,但是数据库中存在,这样的场合一般是某个数据缓存到期了,这个时候读缓存没读到,并发请求上来都去读数据库的这条请求,导致数据库压力很大,这个称为缓存击穿
其实雪崩和击穿很类似,但是不一样的地方在于:
缓存击穿指并发查同一条数据,而缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
进入章节:
- 以下回答由chatgpt基于相关博客总结生成:
RAM删除数据是通过覆盖的方式,即将新数据写入原来的位置,而不是直接删除。但是,手机的RAM的数据无法恢复,因为RAM是一种易失性存储器,一旦失去电源,里面的数据就会被清除。对于电脑在关闭进程的情况下,之前浏览的数据可能仍存在内存中,但也取决于具体实现,一般情况下内存只是将他们标记为可用,并不会真正删除数据。
至于缓存问题,为了避免缓存雪崩和击穿,可以采用以下解决方案:
针对缓存雪崩,可以将缓存失效时间分散开,比如在原来时间的基础上增加一个随机值。另外也需要采用合适的缓存策略来处理溢出,比如LRU策略。
针对缓存击穿,可以采用布隆过滤器等方法来防止不存在的数据不断查询DB,或者将空结果进行缓存但过期时间较短。
如果缓存出现了失效的情况,可以采用加锁或者队列的方式保证缓存的单线程写,避免大量并发请求落到底层存储系统上。
在使用缓存时,需要注意哪些请求不能被缓存,比如含有no-cache等信息的请求,以免缓存失效导致问题。
具体实现方式需要根据具体情况具体分析,选择最合适的方案。同时,在缓存系统中也需要采用持久化策略来保证数据的安全。
你说的删除就是释放而已,不会真正去改写里面的内容,但是一旦被释放,很快就会被后面的数据覆盖,毕竟ram的操作是很频繁的