您的位置:首页 > 数据库 > Redis

redis实现网站最新登录用户功能

2015-09-20 22:21 549 查看
在网站开发过程中经常会遇到关于《最近登录用户TOP10》或是《最高得票TOP10》诸如此类的问题 ,传统思路主要是通过MySQL的order by 和limit 10 来做TOP10的获取。这里讲解一种利用redis的list和zset快速实现TOP10功能。

传统sql方式查找TOP10,我们写这样一条sql :

select * from user order by `last_login_time` desc limit 0 , 10;
当我们执行这条sql执行下去的时候会进行全表扫描(没有做索引的情况下),在user表记录比较少的情况下,这种方式不会存在任何的问题,如果user表示一张非常巨大(比如5000万用户)的表时,一条sql执行就会扫表5000万行记录,这样会大大降低mysql数据库的性能。

redis的方式实现:

设置一个list链表

第一个用户登录后将用户的uid推进链表最左侧

lpush logintop10 uid1

第二个用户登录后将用户的uid推进链表最左侧

lpush logintop10 uid2

在此之前我们可以通过llen来统计链表的长度,当第11个用户登录进来后,我们lpush进链表后,同时将链表最右侧的用户rpop出链表,这样就维持最新登录10个用户的数据信息,这样TOP10的数据就不再通过sql查询来获取,这样大大降低了对sql的压力,特别适用于实时更新统计的系统设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: