来自公众号:小姐姐味道

作者简介:一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。

本篇文章很短,但信息量很大,是关于rediszset。我来分享一点遇到过的线上数据,或许对你的决策有帮助。

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左右。这是由于跳表的特殊结构所引起的,额外的辅助信息会占用更多的内存。

以下是经验值:

  1. 最高TPS写入量1k/秒

  2. 同时最高QPS查询量5k/秒

  3. 平均耗时5ms左右。

  4. 百分之95的请求都在10ms以内返回。

  5. 长尾请求超过100ms的不超过100条。

也就是说,在保持高写入和高查询的同时,zset能够保证较低的响应耗时。

你要说再多,我就不知道了,看这些数据,或许还能够再升一把。但要让服务要尽量的稳,压力尽量的分散,就不能太过苛刻,对这个数据我已经很满意了。

这只是一个省份的数据。如果综合起来,上层的业务,就需要承载10w/s的请求。这是非常容易的,但也没有意义,许多高并发经验都是这么吹上去的,要不要去改改简历?

复杂业务高并发才有价值,10w/s请求,给我两台redis就够了,没必要拿来吹。

但也是被zset的性能震惊了一把。跳表的结构,也了解一些,没想到在高并发大数据量场景下,能这么快。

测试数据?没有。本文只是分享一个经验值。对了,redis几乎不占用CPU,你只需要一台2core16gb的服务器就可以了。

Redis的zset有多牛?请把耳朵递过来相关推荐

  1. 线上redis一般安在linux_redis的zset有多牛?请把耳朵递过来

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. 本篇文章很短,但信息量很大,是关于redis的zset.我来分享一点遇到过的线上数据,或许对你的决策有帮助. redis支 ...

  2. zset中的score_读懂才会用 : 带你见识 Redis 的 zset

    快餐车 本文从代码角度分析Redis 的 zset 结构,希望通过本文掌握如下内容: Redis 中 zset 不是单一结构完成,是跳表和哈希表共同完成 跳表的实现原理,跳表升维全靠随机 跳表中查找. ...

  3. 【Redis之ZSet类型的详解ZSet类型中常用命令的实践】

    Redis之ZSet类型的详解&ZSet类型中常用命令的实践 知识回顾: 通过对Redis中的String的命令做了充分的讲解以及实践学习 通过对Redis中String类型之Bit命令的详解 ...

  4. Redis中ZSet的底层数据结构跳跃表skiplist,你真的了解吗?

    欢迎大家关注我的微信公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.前言 老周写这篇文章的初衷是这样的,之前项目中有大量使用 R ...

  5. redis ZSet php,redis中zset怎么使用

    Redis中zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序.可以理解了有两列的mysql表, ...

  6. zset 怎么get_使用redis的zset实现高效分页查询(附完整代码)

    一.需求 移动端系统里有用户和文章,文章可设置权限对部分用户开放.现要实现的功能是,用户浏览自己能看的最新文章,并可以上滑分页查看. 二.数据库表设计 涉及到的数据库表有:用户表TbUser.文章表T ...

  7. 读懂才会用 : 带你见识 Redis 的 zset

    快餐车 本文从代码角度分析Redis 的 zset 结构,希望通过本文掌握如下内容: Redis 中 zset 不是单一结构完成,是跳表和哈希表共同完成 跳表的实现原理,跳表升维全靠随机 跳表中查找. ...

  8. 使用redis的zset实现排行榜

    1.使用场景 现在公司有个项目,类似于今日头条,需要实现对应分类阅读排行榜的功能. 每一篇文章所属于一个分类,当用户阅读该文章时,阅读次数+1,排行榜实时变化. 2.redis的ZSet数据结构 zs ...

  9. java和redis统计在线,在SpringBoot中使用Redis的zset统计在线用户信息

    统计在线用户的数量,是应用很常见的需求了.如果需要精准的统计到用户是在线,离线状态,我想只有客户端和服务器通过保持一个TCP长连接来实现.如果应用本身并非一个IM应用的话,这种方式成本极高. 现在的应 ...

最新文章

  1. 新模拟算法揭秘加州地震史:更准确有效
  2. ActivityMQ消息持久化到HANA数据库
  3. Android--EditText控件属性汇总
  4. Python模块之间的相互引用问题
  5. 批处理启动和关闭VMware
  6. JFreeChart(七)之气泡图表​​​​​​​
  7. 408. Valid Word Abbreviation
  8. Basic Calculator II
  9. 为什么要使用向量化?
  10. c# WebApi之解决跨域问题:Cors
  11. ppt拖动就复制_在PPT中有哪些常用快捷键可大大提高效率?
  12. 【PHPWord】PHPWord导出PDF格式文件的几种方式以及最优解并附代码
  13. cad计算机绘注意事项,CAD制图的注意事项
  14. 关于如何实现一个至简的麻将模拟程序的思考
  15. python 将中文数字转换为阿拉伯数字
  16. 电脑连接手机热点用百度云下载一会后断网
  17. Centos6.4忘记密码 单机下修改root密码
  18. C Primer Plus(6) 中文版 第9章 函数 9.1 复习函数
  19. 中式装修之美,呈现出东方的诗意与唯美
  20. 在c语言中pwm的作用,详细注解的PWM c程序初学者适用

热门文章

  1. 【OpenCV3】OpenCV3.2.0在VS2013环境下Cmake编译与快速配置
  2. leetcode874
  3. 解决服务器上安装不了centos7.4的问题
  4. PHP中使用ActiveMQ实现消息队列
  5. 32.3. redis-cli - Command-line client to redis-server
  6. Arduino数字引脚作为GPIO的使用
  7. 如何注册域名-买服务器-备案-建设网站
  8. Hive2.1.0集成Tez
  9. JavaCC首页、文档和下载 - 语法分析生成器 - 开源中国社区
  10. FS,FT,DFT,DFS和DTFT的关系