Redis分布式

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 1 Redis分布式算法原理1.1 传统分布式算法举个例子蓝色表与4个节点时相同槽1.
img_e53920a33015789ad145353fb3cc9adb.png

img_8f617c9236af9ca7a2e19c517dbfbe2f.png

1 Redis分布式算法原理

1.1 传统分布式算法

img_5cf14907a51cee4f75defe079cbaaa8b.png
举个例子

img_7e2a9c9b493aa775161c1066e1315a5d.png

img_72be8820ed975f0462718dec1ad42441.png

img_66cfd9e33db287ed4690b4c45d605409.png
蓝色表与4个节点时相同槽

img_f8e5ec35bd5d804a6d125fcabc10c467.png

img_4a4c930d4800d883a84834de3ffc3c16.png

1.2 Consistent hashing一致性算法原理

  • 环形 hash 空间:按照常用的 hash 算法来将对应的 key 哈希到一个具有 232 个桶的空间,即(0-232-1)的数字空间中,现在我们将这些数字头尾相连,想象成一个闭合的环形
  • 把数据通过一定的 hash 算法映射到环上
  • 3 将机器通过一定的 hash 算法映射到环上
  • 4节点按顺时针转动,遇到的第一个机器,就把数据放在该机器上


    img_654e9e6b56865765e61587b43677c3e8.png

    img_83e2c3d029918f2b636c8b935658a9c0.png

    img_c47281f7136498d46616d29b86899904.png

    在移除 or 添加一个 cache 时,他能够尽可能小的改变已经存在 key 映射关系。


    img_3f2716bb3229bc7e02261a8a05f0d0c1.png

    img_90057ec822dd9ec79d6698a8ca384102.png
    删除CacheB后,橙色区为被影响范围

    img_0fbb387d40090fcfa7b59fbca6730a3e.png

    img_62f1647bdf401aced060a1e99ef3770a.png
    也许心中的分布式这样的

    img_a4394221b2137bfad2ef5c54d6c9ff21.png
    但实际会这样拥挤-即倾斜性

    1.3 ##Hash倾斜性


    img_1f6c0a0ca59c814a9abe2a046d111f91.png

    为解决此类事件,引入了虚拟节点
    img_971cf0d43c6379ea99d8024acfe62590.png

    img_cc4363ff33ee4d1a7bada67963f45758.png

    img_c63ed41eaf78415e56ac655afed940b3.png
    服务器台数n,新增服务器数m

2 Redis分布式环境配置

img_b08b09c1ded468e8fc819ff1eea4658e.png

3 Redis分布式服务端及客户端启动

img_e4694a6a7e85f264f79c55200dffa11f.png

4封装分布式Shared Redis API

4.1 SharedJedis源码解析

img_428b13e0b54a66b309e55dcffa5f5371.png
ShardedJedis.png

封装RedisSharedPool

测试代码

集成测试

5 Redis分布式环境验证

img_9bcf621e4e8b6a9966df3e7a47010e3f.png

6 集群和分布式

  • 分布式:不同的业务模块拆分到不同的机器上,解决高并发的问题。 工作形态
  • 集群:同一个业务部署在多台机器上,提高系统可用性 是物理形态
    集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

你前台页面有10个用户,分别发送了1个请求,那么如果不是集群的话,那这10个请求需要并行在一台机器上处理,如果每个请求都是1秒钟,那么就会有一个人等待10秒钟,有一个人等待9秒钟,以此类推;那么现在在集群环境下,10个任务并分发到10台机器同时进行,那么每个人的等待时间都还是1秒钟;
当然,你说的浪费确实是,如果系统的并发不是很高,只有一台或者两台机器就能处理的话,那确实是有很大的浪费

目录
相关文章
|
2月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
195 2
|
2月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
103 0
|
3月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
21天前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
15天前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
3月前
|
NoSQL Redis
Lua脚本协助Redis分布式锁实现命令的原子性
利用Lua脚本确保Redis操作的原子性是分布式锁安全性的关键所在,可以大幅减少由于网络分区、客户端故障等导致的锁无法正确释放的情况,从而在分布式系统中保证数据操作的安全性和一致性。在将这些概念应用于生产环境前,建议深入理解Redis事务与Lua脚本的工作原理以及分布式锁的可能问题和解决方案。
132 8
|
4月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1042 7
|
缓存 NoSQL Java
为什么分布式一定要有redis?
1、为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。
1447 0
|
机器学习/深度学习 缓存 NoSQL
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?