日期:2014-05-17  浏览次数:20515 次

所谓的缓存,到底是什么?
本帖最后由 diaodiaop 于 2013-04-08 13:14:49 编辑
有人说,是为了减少程序与服务器(数据库)之间交互的次数,对不对??

如果是这样 那么有一个例子

假设 数据是这样的

create table tb_test
(
 id int identity(1,1) primary key,
 title varchar(100),
 content varchar(8000)
)

假设这个表是公告.那么查询最新的一条的话 是

select * from tb_test order by id desc

1`在没有缓存的情况下 一个人(A)登陆了 查询下数据库 可以看到最新的数据. 
   假设这个时候有人(B)发布了最新的消息
    那么(A)重新刷新下 也可以看到
2`如果要加上缓存的话 是怎么样的呢?
   每次访问 看到的 是不是最新的数据?
  如果不是 那缓存也没什么意义了..
  如果是 那缓存好像还是没什么意义..
求解

------解决方案--------------------
用了缓存就不是最新数据了 。比如 淘宝,经常是 库存有,但是,其实是缺货什么的。 

缓存,对服务器负担大,但是页面加载,数据读取比较快。。

个人理解,欢迎拍砖
------解决方案--------------------
1 在没有缓存的情况下 一个人(A)登陆了 查询下数据库 可以看到最新的数据. 
假设这个时候有人(B)发布了最新的消息
那么(A)重新刷新下 也可以看到

首先,在大数据的情况下,每次查询数据库都是一个很大的开销,假设某个查询数据库的sql比较耗时,需要1s,
在没有缓存的情况下,每次用户都去查询数据库都是1s(不计DB缓存),无论A,还是B还是A重新查询


2`如果要加上缓存的话 是怎么样的呢?
   每次访问 看到的 是不是最新的数据?
  如果不是 那缓存也没什么意义了..
  如果是 那缓存好像还是没什么意义..

加上缓存后,该查询会先检查内存中有无数据,一般按照KEY来查询,如果有,就会省略数据库查询的1s而直接得到内存的数据,ms级的数量级。这样尤其在短时间内多次查询数据库特别有效。

如果有新的数据,Cache都会有策略清除内存中的数据,例如你插入了一个key为1的数据,Cache会检查自身是否有key=1的数据在内存中,如果有,则将其清空,下次访问依然会查询数据库,这些有时需要手动配置。

------解决方案--------------------
首先并不是所有的东西都适合用缓存的,这个得根据具体情况而定。
你举的这个例子是需要实时更新的,所以不适合用缓存。缓存的话一般用于哪些更新不频繁的数据,比如说一些配置信息等。
以上言论纯属个人认知
------解决方案--------------------
缓存主要是避免页面和数据库进行多次的交互 一个网站特别大的话 访问量也特别大 没进来一个用户我都要去数据库执行各种语句  可见这样造成的后果是多么的严重 如果把数据库的数据都加载到缓存中 那么用户每次访问数据就可以直接从缓存中读取了 这样会大大提高数据的效率 而且还能提高网站的效率 有助有高并发
------解决方案--------------------
引用:
1 在没有缓存的情况下 一个人(A)登陆了 查询下数据库 可以看到最新的数据. 
假设这个时候有人(B)发布了最新的消息
那么(A)重新刷新下 也可以看到

首先,在大数据的情况下,每次查询数据库都是一个很大的开销,假设某个查询数据库的sql比较耗时,需要1s,
在没有缓存的情况下,每次用户都去查询数据库都是1s(不计DB缓存),无论A,还是B还是A重新查询
……

第一次访问的数据刷新之后有缓存,就不需要从数据库读取了,因为这也是需要时间的了,减少服务器负荷压力
------解决方案--------------------
感觉缓存 就是多次重复调用数据的时候,减轻服务器调用数据的负担··,缓存也可以加上名称,比如我设置了30秒的话,30秒内重复调用同数据,那我还是去缓存里的数据 而不需要去重新链接下数据库调用..我单纯的理解 同个电脑 应该与登录AB无关
------解决方案--------------------
看看这个吧,感觉数据库缓存依赖最好用了,一旦数据库数据变化,系统能自动更新缓存中的数据
------解决方案--------------------
引用:
2`如果要加上缓存的话 是怎么样的呢?
   每次访问 看到的 是不是最新的数据?
  如果不是 那缓存也没什么意义了..
  如果是 那缓存好像还是没什么意义..
求解

当你有数据库更新的时候,缓存应该做同步修改(增删改都应该通知缓存自动处理)。
那么你这个需求除了启动程序需要查询数据库,以后再也不需要因为请求而查询数据库了。
------解决方案--------------------
缓存和刷新没有关系的,缓存后确实不能看到最新数据,但是总不可能随时就有最新数据吧,而且缓存是可以制定策略的,例如如果发生更新后即更新缓存,这也是可以的。可以这么说,大网站哪个不用缓存,关键是你如果应用是关键。
------解决方案--------------------