Redis-代理(解决redis压力)

Redis-代理(解决redis压力),第1张

如果没有反向代理,一台Redis客户端需要跟很多个客户端连接:

看着是不是很懵逼?没关系,主要连接需要消耗线程资源,没有代理的话,Redis要将很大一部分的资源用在与客户端建立连接上,Redis的高可用和可扩展性,无论是自带的Sentinel还是Cluster都要求客户端进行额外的支持,而目前基本上没有合适的客户端能够做这些事情,客户端来做这些事情也并不合适,它会让维护变的跟糟糕。

因此客户端和Redis服务端之间加一层代理成了一种理想的方案,代理屏蔽后端

Redis实现细节想客户端提供Redis服务,可以完美的解决Redis的高可用和扩展性的问题。

很简单,将请求链接到代理服务器上,有Proxy负责将请求转发到后面的Redis服务器实例:

那么问题来了,如果Proxy挂了呢?

所以Proxy需要做集群,前面再加一层负载均衡(LVS),而其单机也存在故障的风险,所以整一个主备,备机通过KeeAlived来检测主LVS的健康状况,出现故障自动切换过去:

Redis Cluster 的实现方案十分的聪明,它的分区方式采用了虚拟槽分区。

Redis Cluster 首先会预设虚拟槽,每个槽就相当于一个数字,有一定范围,每个槽映射一个数据子集。

Redis Cluster中预设虚拟槽的范围为 0 到 16383

————————————————————

坐标帝都,白天上班族,晚上是知识的分享者

如果读完觉得有收获的话,欢迎点赞加关注

redisproxy有高并发限制吗,限制,一. 如果某接口的QPS的要求很高,比如超过1W,怎么部署?

          redis部署层面,要做集群,redis集群有三种模式:

        1.1 读写分离。主库(写)+两个以上从库(读)

         1.2 哨兵模式:有一个独立sentinel系统监控,主从,如果主机挂了,可以把从2设置为主

->

         1.3 集群,多数据节点模式(数据存多个节点)redis 数据分片使用的是hash slot, redis集群有16384个哈希槽,每个Key通过CRC16校验后对16384取模来决定放置哪一个槽

         2. 少量热KEY的处理,怎么办?

                2.1 多级缓存,这些热key用本地缓存,

                2.2 但是业务复杂很难知道哪些会成为热key,怎么办?可采用在客户端和Redis之间做一个proxy代理(这个proxy最好单独做一个第三方的程序),监控key的访问频率,如果高的key,就缓存到客户端本地缓存,或者就缓存到proxy本地。

                网络流程:客户端 ->proxy ->Redis(客户端到proxy,根据key的hash值取模到对应的proxy)

                2.3 那这个proxy,为什么不客户端自己统计,而单独整一个proxy服务器,因为客户端应用可能很多,单个客户端自己统计不太精准,集中式统计更精准,客户端自己统计和存这些key也耗内存和性能,所以单独整一个proxy,如果proxy自己性能不好了,再横向扩展这个proxy也方便。

         Redis缓存尽量制作存储,少做业务修改。

二、减扣库存的接口QPS达到数万。怎么办?【写热点问题】

        2.1 外层限流90%,让10%可承受的流量的进来(可用Sentinel阿里的)

        2.2 到了业务层减扣redis的库存,采用redis的计数器,increment方法,这样保证原子性

        2.3 合并减扣:比如减扣1000库存,想办法值减100次,每次减掉10各库存,提升10倍性能

        2.4 库存分段模式:比如库存有1W,那么可以把这个库存分为5个key存储,每个key存2000,减扣的话就从5各分别去减,避免单个key去减扣1W

Redis源码获取

1、进入Redis官网获取Redis最新稳定版下载地址

2、通过wget命令下载 Redis 源代码。

Redis编译

1、通过tar -xvf redis-3.0.2.tar.gz命令解压下载Redis源码压缩包redis-3.0.2.tar.gz;

2、编译Redis。通过cd redis-3.0.2/进入Redis源码目录内,执行make编译Redis;

注意:make命令执行完成编译后,会在src目录下生成6个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel

Redis安装配置

1、安装Redis,执行make install。会将make编译生成的可执行文件拷贝到/usr/local/bin目录下;

2、执行./utils/install_server.sh配置Redis配置之后Redis能随系统启动。

Redis服务查看、开启、关闭

1、通过ps -ef|grep redis命令查看Redis进程;

2、开启Redis服务操作通过/etc/init.d/redis_6379 start命令,也可通过(service redis_6379 start);

3、关闭Redis服务操作通过/etc/init.d/redis_6379 stop命令,也可通过(service redis_6379 stop);


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/426868.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-26
下一篇2023-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存