为何get请求的参数会被缓存
GET请求的参数会被缓存是因为GET请求是幂等的,即多次请求同一个URL返回的结果应该是一致的。为了提高性能和减少网络流量,浏览器和代理服务器会将GET请求的URL和参数作为缓存的键,将响应结果缓存起来。
当下次请求相同的URL和参数时,可以直接从缓存中获取响应结果,避免再次发送请求和服务器的处理,从而提高页面加载速度和减轻服务器负载。
但需要注意的是,缓存的有效期由服务器返回的响应头中的Cache-Control和Expires字段决定,如果服务器设置了不缓存的策略,GET请求的参数就不会被缓存。
1. 会被缓存2. 因为GET请求的参数通常是通过URL传递的,而URL是可以被浏览器缓存的。
当浏览器发现相同的URL请求时,会直接从缓存中获取响应,而不会再次发送请求到服务器。
3. 这种缓存机制可以提高网页加载速度和减轻服务器的负载,因为不需要每次都从服务器获取相同的资源。
但是需要注意的是,如果GET请求的参数会影响到资源的内容或状态,那么缓存可能会导致不一致的结果。
因此,在某些情况下,需要使用其他方式来避免缓存,例如在URL中添加随机数或时间戳来使每次请求都是唯一的。
原因是出现在ajax的缓存了,在浏览器中,get请求是有缓存的,Ajax在发送的数据成功后,会把请求的URL和返回的响应结果保存在缓存内,当下一次调用Ajax发送相同的请求时,它会直接从缓存中把数据取出来,这是为了提高页面的响应速度和用户体验。
redis怎么缓存用户列表,做到可以分页展示
普通分页
一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。
如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。
比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。
一种思路
最近想到了另一种思路。
数据以ID为key缓存到Redis里;
把数据ID和排序打分存到Redis的skip list,即zset里;
当查找数据时,先从Redis里的skip list取出对应的分页数据,得到ID列表。
用multi get从redis上一次性把ID列表里的所有数据都取出来。如果有缺少某些ID的数据,再从数据库里查找,再一块返回给用户,并把查出来的数据按ID缓存到Redis里。
在最后一步,可以有一些小技巧:
比如在缺少一些ID数据的情况下,先直接返回给用户,然后前端再用ajax请求缺少的ID的数据,再动态刷新。
还有一些可能用Lua脚本合并操作的优化,不过考虑到Lua脚本比较慢,可能要仔细测试。
如果是利用Lua脚本的话,可以在一个请求里完成下面的操作:
查找某页的所有文章,返回已缓存的文章的ID及内容,还有不在缓存里的文章的ID列表。
其它的一些东东:
Lua是支持LRU模式的,即像Memcached一样工作。但是貌似没有见到有人这样用,很是奇怪。
可能是用redis早就准备好把redis做存储了,也不担心内存的容量问题。
还没有评论,来说两句吧...