redis实现网站最新登录用户功能
2015-09-20 22:21
549 查看
在网站开发过程中经常会遇到关于《最近登录用户TOP10》或是《最高得票TOP10》诸如此类的问题 ,传统思路主要是通过MySQL的order by 和limit 10 来做TOP10的获取。这里讲解一种利用redis的list和zset快速实现TOP10功能。
传统sql方式查找TOP10,我们写这样一条sql :
redis的方式实现:
设置一个list链表
第一个用户登录后将用户的uid推进链表最左侧
lpush logintop10 uid1
第二个用户登录后将用户的uid推进链表最左侧
lpush logintop10 uid2
在此之前我们可以通过llen来统计链表的长度,当第11个用户登录进来后,我们lpush进链表后,同时将链表最右侧的用户rpop出链表,这样就维持最新登录10个用户的数据信息,这样TOP10的数据就不再通过sql查询来获取,这样大大降低了对sql的压力,特别适用于实时更新统计的系统设计。
传统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的压力,特别适用于实时更新统计的系统设计。
相关文章推荐
- Spring Boot 分布式Session状态保存Redis
- Spring Boot 分布式Session状态保存Redis
- Spring Boot 分布式Session状态保存Redis
- Spring Boot 分布式Session状态保存Redis
- redis的key的过期机制
- Redis安装
- redis远程登录
- redis2.8.22编译、安装、运行、停止
- 【Redis】Redis学习笔记02_使用Redis来管理Tomcat集群的Session
- Redis Sentinel
- Mybatis使用Redis二级缓存
- 几点建议,让Redis在你的系统中发挥更大作用
- redis 安装 以及php扩展安装
- java对redis的基本操作
- Windows版的Redis
- centos7 安装 redis
- Redis 禁用FLUSHALL FLUSHDB KEYS 命令
- springMvc redis 配置开发案例
- redis 集群性能测试以及与单机性能对比
- Redis配置文件解析