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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 【第六讲,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更新数据。

相关文章
|
7月前
|
存储 NoSQL 前端开发
Redis专题-实战篇一-基于Session和Redis实现登录业务
本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
424 3
Redis专题-实战篇一-基于Session和Redis实现登录业务
|
7月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
314 1
Redis专题-实战篇二-商户查询缓存
|
10月前
|
缓存 监控 NoSQL
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
568 42
|
10月前
|
机器学习/深度学习 存储 NoSQL
基于 Flink + Redis 的实时特征工程实战:电商场景动态分桶计数实现
本文介绍了基于 Flink 与 Redis 构建的电商场景下实时特征工程解决方案,重点实现动态分桶计数等复杂特征计算。通过流处理引擎 Flink 实时加工用户行为数据,结合 Redis 高性能存储,满足推荐系统毫秒级特征更新需求。技术架构涵盖状态管理、窗口计算、Redis 数据模型设计及特征服务集成,有效提升模型预测效果与系统吞吐能力。
1090 10
|
10月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
2728 7
|
存储 缓存 NoSQL
Redis实战之入门进阶到精通
Redis 是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis 提供了 5 种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis 的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding)等特性,用户可以很方便地将 Redis 扩展成一个能够包含数百 GB 数据、每秒处理上百万次请求的系统。
Redis实战之入门进阶到精通
|
存储 NoSQL Java
当Java遇到Redis:Jedis实战入门
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。本文将概要介绍Redis的特性和语法,并以实例代码的形式介绍如何通过Jedis在java语言环境下控制Redis,帮助各位读者快速入门。
1890 0
|
NoSQL 数据库 Redis
Redis学习到实战(一)基础与入门
一、前言 一直都说要写一些redis,但是苦于网上资料甚少,Redis又不是基于java的,源码也没深究。
994 0

热门文章

最新文章

相关产品

  • 云数据库 Tair(兼容 Redis)