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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 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
相关文章
|
17天前
|
存储 缓存 NoSQL
深入解析Redis:一种快速、高效的键值存储系统
**Redis** 是一款高性能的键值存储系统,以其内存数据、高效数据结构、持久化机制和丰富的功能在现代应用中占有一席之地。支持字符串、哈希、列表、集合和有序集合等多种数据结构,适用于缓存、计数、分布式锁和消息队列等场景。安装Redis涉及下载、编译和配置`redis.conf`。基本操作包括键值对的设置与获取,以及哈希、列表、集合和有序集合的操作。高级特性涵盖发布/订阅、事务处理和Lua脚本。优化策略包括选择合适数据结构、配置缓存和使用Pipeline。注意安全、监控和备份策略,以确保系统稳定和数据安全。
220 1
|
1月前
|
NoSQL Linux Redis
Linux系统中安装redis+redis后台启动+常见相关配置
Linux系统中安装redis+redis后台启动+常见相关配置
|
1天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
|
8天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
147 10
|
29天前
|
NoSQL Redis
Netty实战:模拟Redis的客户端
Netty实战:模拟Redis的客户端
14 0
|
1月前
|
存储 NoSQL Redis
KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)
KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)
22 0
|
1月前
|
NoSQL Java 数据库
优惠券秒杀案例 - CAS、Redis+Lua脚本解决高并发并行
优惠券秒杀案例 - CAS、Redis+Lua脚本解决高并发并行
|
4月前
|
Java
在高并发环境下,再次认识java 锁
在高并发环境下,再次认识java 锁
36 0
|
4月前
|
消息中间件 NoSQL Java
Java高级开发:高并发+分布式+高性能+Spring全家桶+性能优化
Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师之路
|
10天前
|
缓存 负载均衡 Java
Java高并发性能指标
Java高并发是指在Java编程环境中,系统能够同时处理大量并发请求或操作的能力。这里的“高”强调的是并发处理的数量级较大,需要系统能够有效地管理多个并发的执行单元,如线程或进程,以确保它们能够高效且正确地执行。
10 0

相关产品

  • 云数据库 Redis 版