【七天玩转Redis实战营】答疑汇总Day6 Redis的高并发实战:抢购系统

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 【第六讲,Redis的高并发实战:抢购系统】讲师:浅奕,阿里云NoSQL内核工程师。课程内容:IO模型和问题;资源竞争,与分布式锁;如何利用Redis的高并发原理做抢购系统。答疑汇总:特感谢班委@张鹏 同学

【第六讲,Redis的高并发实战:抢购系统

讲师:浅奕,阿里云NoSQL内核工程师。
课程内容:IO模型和问题;资源竞争,与分布式锁;如何利用Redis的高并发原理做抢购系统。

答疑汇总:特感谢班委@张鹏 同学

文字答疑封面.jpg
1.      zset hash 的配合使用

zset 存储主键 key 和分数,然后 key hash, 这样容量和缓存占比应该是最小的。但是问题是批量查询,zset 是有一个还是很多个,如果是一个,要小心成为热点 key hash 有一个 mget ,可以拿一个hash 的多个字段,但是多个 hash 是没有相关API 一次性拿的,原因是多个 hash key 可能存在集群的多个分片上。

2.       stream 实现一个消息队列?

使用方法类似于 kafka , 需要有producer, consumer group, topic 等。

3.      缓存怎么和数据库保持强一致?

首先是很难保证的,应该尽量避免数据不一致。如果出现不一致,要以最可靠的数据库做一个兜底。要避免这个问题,主要是解决缓存在更新的时候。一种方式是只有一个线程写,定时从数据库更新数据到缓存,可以监听数据库 binlog 的修改,更新缓存。另一种方式是业务线程来更新,先持久化再删除缓存,然后读逻辑来更新缓存。缓存一般是要设置过期时间的。

4.      Set Sorted Set对性能是否有影响?

Redis 的数据结构为了省内存,编码是有两种或两种以上的,在配置里边会有一个默认值,比如可以设置 set 它在成员小于多少的时候是一个列表,大于的时候是一个哈希结构。hash 结构的查询效率是O(1), 排序集合使用跳表,成员小于一定数量是使用压缩表。一般情况不要调大这个参数值,可以改小这个参数值,尽量用稀疏的数据结构,用 hash和跳表,不要使用压缩结构,压缩结构查询和插入效率一般都是O(n) 的。

5.      秒杀场景节点多少个比较好?

看业务需求了,单分片单key 的能力是QPS 10万左右,然后对业务的预估确定分片数,理想情况,查询比较散的情况下,根据总的QPS 计算,预留 30% 的水位就可以了。

分片太多也不好,正常的访问是没问题的,只是发生变化的时候,客户端会有比较多的错误。如果是开源版,节点比较多集群Gossip 协议广播会比较厉害。

6.      Lua 的问题是不是可以使用单独集群处理?

Lua 需要慎用,但不是不用。我们要清楚正常的一个读写能达到 QPS 10万,如果在lua 里面可能就只有8万了。对性能有一定影响。不要在 lua 里写比较复杂的循环。对性能的影响就是lua 本身需要编译执行。如果 lua 都非常小,不需要单独集群处理。主要是控制好lua 执行的时间就好了。

7.      对于大 key 有什么好的方案?

key 一般都是指 listhashset 这类数据结构,list 没有什么好的解法,可以将list 拆分成多个list ,但是对于业务来说是比较难处理的,建议尽量避免大 key

8.      Redis key value string byte数组有什么区别吗?

对于服务端来说没有什么区别,主要看客户端是怎么实现的,比如看最终key value 是怎么序列化的,最终发的时候肯定是一个序列化对象,发到服务端存储的时候就是一个字节数组。只是比如在执行incr 的时候,会对value 做一个数字解析。

9.      Memcached Redis 怎么选?

Memcached 只有 k-v 操作和原子计数操作,Memcached 是多线程方式,单分片性能可能优于Redis,但是数据结构支持较少。业务比较简单只用key-value结构和incr 操作的话,可以选择Memcachedmemcached 数据导入导出比较困难,如果需要,建议选择Redis,而且 Redis 社区比较活跃一点。

10.  Mysql Redis 的同步?

一般的方案是监听 mysql binlog 的变动,然后解析出原始数据操作,去 Redis更新数据。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
29天前
|
NoSQL 安全 测试技术
Redis游戏积分排行榜项目中通义灵码的应用实战
Redis游戏积分排行榜项目中通义灵码的应用实战
52 4
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
79 6
|
1月前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
1月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
195 7
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
90 5
|
2月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
130 2
|
2月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
60 3
|
1月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
46 0
|
2月前
|
Java Go 云计算
Go语言在云计算和高并发系统中的卓越表现
【10月更文挑战第10天】Go语言在云计算和高并发系统中的卓越表现
|
存储 缓存 NoSQL
Redis实战之入门进阶到精通
Redis 是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis 提供了 5 种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis 的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding)等特性,用户可以很方便地将 Redis 扩展成一个能够包含数百 GB 数据、每秒处理上百万次请求的系统。
Redis实战之入门进阶到精通

相关产品

  • 云数据库 Tair(兼容 Redis)