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做存储了,也不担心内存的容量问题。
app不做分页,一直可以一直滑,是什么原因
第一点呢,不做分页主要目的是方便用户,提升用户体验。
第二呢,实现的方法就是判断用户将屏幕滑到底部或者即将到底部,然后触发ajax向服务器提交获取列表数据的请求。 收到服务器返回的请求后,将数据整理组合,填充到页面中
js来回切换页面,数据一直加载不完
1. 是的,js来回切换页面时,数据加载可能会出现加载不完的情况。
2. 这是因为在页面切换过程中,js会发送请求获取数据,但是如果网络延迟或者服务器响应速度慢,可能导致数据加载不完全。
3. 为了解决这个问题,可以采取以下措施进行 a. 使用分页加载或者懒加载的方式,将数据分批加载,减少一次性加载大量数据的压力。
b. 对于重要的数据,可以使用缓存技术,将数据缓存在本地,减少每次切换页面都需要重新加载数据的时间。
c. 对于网络延迟或者服务器响应慢的情况,可以使用loading动画或者提示信息,提醒用户等待数据加载完成。
d. 对于数据加载不完全的情况,可以通过重新发送请求或者刷新页面的方式进行重试,确保数据加载完整。
e. 在编写js代码时,可以优化代码结构和性能,减少不必要的请求和操作,提高页面加载速度和数据加载效率。
在JavaScript中,页面切换可能会导致数据加载不完整的问题。这可能是因为切换页面时,未对之前的数据加载进行合适的处理,导致异步请求没有完成或被中断。
解决方案包括使用合适的异步加载技术(如Promise、async/await)来确保数据加载完成,或者在页面切换前取消未完成的请求以避免数据冲突和重复加载。
此外,优化数据加载过程和网络请求,以提高数据加载速度也是解决问题的重要因素。
还没有评论,来说两句吧...