Redis的zset有多牛?请把耳朵递过来
来自公众号:小姐姐味道
作者简介:一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。
本篇文章很短,但信息量很大,是关于redis
的zset
。我来分享一点遇到过的线上数据,或许对你的决策有帮助。
redis
支持一个数据结构,叫做 zset
,也就是有序的列表。当然redis也不能滥用,可以看我以前的规范文章:《这可能是最中肯的Redis规范了》
忘了zset是个啥的同学可以看这张gif图。
通过它,可以实现游戏排行榜一类的功能,或者实现Topx
这样的需求,也能精准的让用户在海量数据中找到自己的位置。
zset的底层结构是跳跃表,而与之类似的Java中的有序Set是TreeSet
,使用红黑树实现的。
concurrent包里面,还有一个类叫做ConcurrentSkipListMap
,从它的名字就可以看出来,也是用跳跃表实现的,这个和zset最像。
好了,这是前提。广度面试的时候我也会这么问。
我们的问题是:zset中能存放多少条记录?线上有没有有说服力的数据?
先笼统的回答一下,zset理论上
支持的元素最多是2^32-1
个,约42亿,如果你的内存够大,放下国人绰绰有余。
使用redis-benchmark
去测这个效果,不是很可信,测试用例写起来也比较费劲。测完了也不一定信,那就让线上流量去冲击吧。
为了应付产品的需求,我把用户按照省市进行了划分(geohash),结果,用户分布最大的就是广东省,非常棒。
在广东省的zset
里,存放了接近6千万的数据,我们就要算在这6千万内任何人的排行。zcard、zrank等一系列操作,easy实现。
运行一段时间后,内存直接飙升到了8G
左右。这是由于跳表的特殊结构所引起的,额外的辅助信息会占用更多的内存。
以下是经验值:
最高TPS写入量
1k/秒
。同时最高QPS查询量
5k/秒
。平均耗时
5ms
左右。百分之
95
的请求都在10ms
以内返回。长尾请求超过
100ms
的不超过100
条。
也就是说,在保持高写入和高查询的同时,zset能够保证较低的响应耗时。
你要说再多,我就不知道了,看这些数据,或许还能够再升一把。但要让服务要尽量的稳,压力尽量的分散,就不能太过苛刻,对这个数据我已经很满意了。
这只是一个省份的数据。如果综合起来,上层的业务,就需要承载10w/s的请求。这是非常容易的,但也没有意义,许多高并发经验都是这么吹上去的,要不要去改改简历?
复杂业务高并发才有价值,10w/s请求,给我两台redis就够了,没必要拿来吹。
但也是被zset的性能震惊了一把。跳表的结构,也了解一些,没想到在高并发大数据量场景下,能这么快。
测试数据?没有。本文只是分享一个经验值。对了,redis几乎不占用CPU,你只需要一台2core16gb的服务器就可以了。
Redis的zset有多牛?请把耳朵递过来相关推荐
- 线上redis一般安在linux_redis的zset有多牛?请把耳朵递过来
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. 本篇文章很短,但信息量很大,是关于redis的zset.我来分享一点遇到过的线上数据,或许对你的决策有帮助. redis支 ...
- zset中的score_读懂才会用 : 带你见识 Redis 的 zset
快餐车 本文从代码角度分析Redis 的 zset 结构,希望通过本文掌握如下内容: Redis 中 zset 不是单一结构完成,是跳表和哈希表共同完成 跳表的实现原理,跳表升维全靠随机 跳表中查找. ...
- 【Redis之ZSet类型的详解ZSet类型中常用命令的实践】
Redis之ZSet类型的详解&ZSet类型中常用命令的实践 知识回顾: 通过对Redis中的String的命令做了充分的讲解以及实践学习 通过对Redis中String类型之Bit命令的详解 ...
- Redis中ZSet的底层数据结构跳跃表skiplist,你真的了解吗?
欢迎大家关注我的微信公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.前言 老周写这篇文章的初衷是这样的,之前项目中有大量使用 R ...
- redis ZSet php,redis中zset怎么使用
Redis中zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序.可以理解了有两列的mysql表, ...
- zset 怎么get_使用redis的zset实现高效分页查询(附完整代码)
一.需求 移动端系统里有用户和文章,文章可设置权限对部分用户开放.现要实现的功能是,用户浏览自己能看的最新文章,并可以上滑分页查看. 二.数据库表设计 涉及到的数据库表有:用户表TbUser.文章表T ...
- 读懂才会用 : 带你见识 Redis 的 zset
快餐车 本文从代码角度分析Redis 的 zset 结构,希望通过本文掌握如下内容: Redis 中 zset 不是单一结构完成,是跳表和哈希表共同完成 跳表的实现原理,跳表升维全靠随机 跳表中查找. ...
- 使用redis的zset实现排行榜
1.使用场景 现在公司有个项目,类似于今日头条,需要实现对应分类阅读排行榜的功能. 每一篇文章所属于一个分类,当用户阅读该文章时,阅读次数+1,排行榜实时变化. 2.redis的ZSet数据结构 zs ...
- java和redis统计在线,在SpringBoot中使用Redis的zset统计在线用户信息
统计在线用户的数量,是应用很常见的需求了.如果需要精准的统计到用户是在线,离线状态,我想只有客户端和服务器通过保持一个TCP长连接来实现.如果应用本身并非一个IM应用的话,这种方式成本极高. 现在的应 ...
最新文章
- 新模拟算法揭秘加州地震史:更准确有效
- ActivityMQ消息持久化到HANA数据库
- Android--EditText控件属性汇总
- Python模块之间的相互引用问题
- 批处理启动和关闭VMware
- JFreeChart(七)之气泡图表​​​​​​​
- 408. Valid Word Abbreviation
- Basic Calculator II
- 为什么要使用向量化?
- c# WebApi之解决跨域问题:Cors
- ppt拖动就复制_在PPT中有哪些常用快捷键可大大提高效率?
- 【PHPWord】PHPWord导出PDF格式文件的几种方式以及最优解并附代码
- cad计算机绘注意事项,CAD制图的注意事项
- 关于如何实现一个至简的麻将模拟程序的思考
- python 将中文数字转换为阿拉伯数字
- 电脑连接手机热点用百度云下载一会后断网
- Centos6.4忘记密码 单机下修改root密码
- C Primer Plus(6) 中文版 第9章 函数 9.1 复习函数
- 中式装修之美,呈现出东方的诗意与唯美
- 在c语言中pwm的作用,详细注解的PWM c程序初学者适用
热门文章
- 【OpenCV3】OpenCV3.2.0在VS2013环境下Cmake编译与快速配置
- leetcode874
- 解决服务器上安装不了centos7.4的问题
- PHP中使用ActiveMQ实现消息队列
- 32.3. redis-cli - Command-line client to redis-server
- Arduino数字引脚作为GPIO的使用
- 如何注册域名-买服务器-备案-建设网站
- Hive2.1.0集成Tez
- JavaCC首页、文档和下载 - 语法分析生成器 - 开源中国社区
- FS,FT,DFT,DFS和DTFT的关系