外卖系统关于redis使用解决高并发情况

1、如何配置redis

在java中操作redis

操作步骤:

1、导入Spring Data Redis的maven坐标

2、配置Redis数据源

3、编写配置类,创建RedisTemplate对象

4、通过RedisTemplate对象操作Redis

2、Redis结合Lua脚本

  • 减少网络开销:使用Lua脚本,无需向Redis 发送多次请求,执行一次即可,减少网络传输
  • 原子操作:Redis 将整个Lua脚本作为一个命令执行,原子,无需担心并发
  • 复用:Lua脚本一旦执行,会永久保存 Redis 中,其他客户端可复用

lua执行过程

重试、限流、熔断被称为分布式系统高可用性的四板斧;

分布式限流

分布式区别于单机限流,它把整个分布式集群环境中所有服务器当作一个整体来考量。比如针对IP,我们限制一个IP每秒最多访问10个访问,不管来自这个IP的地址的请求落在了哪台机器上,只要是访问了集群中的服务节点,那么都会收到限制规则的制约。

目前两种主要的限流方案:

  • 网关层限流。将限流规则应用再所有流量的入口处
  • 中间件限流。将限流信息存储在分布式环境中某个中间件里(例如redis),每个组件都能从这里获取到当前时间的流量统计,从而决定是否放行还是拒绝。
复制代码
-- 获取调用脚本时传入的第一个key值(用作限流的 key)
local key = KEYS[1]
-- 获取调用脚本时传入的第一个参数值(限流大小)
local limit = tonumber(ARGV[1])

-- 获取当前流量大小
local curentLimit = tonumber(redis.call('get', key) or "0")

-- 是否超出限流
if curentLimit + 1 > limit then
    -- 返回(拒绝)
    return 0
else
    -- 没有超出 value + 1
    redis.call("INCRBY", key, 1)
    -- 设置过期时间
    redis.call("EXPIRE", key, 2)
    -- 返回(放行)
    return 1
end
相关推荐
野猪亨利66713 分钟前
Qt day1
开发语言·数据库·qt
本就一无所有 何惧重新开始30 分钟前
Redis技术应用
java·数据库·spring boot·redis·后端·缓存
isaki13734 分钟前
qt day1
开发语言·数据库·qt
流星白龙42 分钟前
【Qt】4.项目文件解析
开发语言·数据库·qt
小钻风336642 分钟前
HTTPS是如何确保安全的
网络·数据库
CryptoPP1 小时前
获取越南股票市场列表(包含VN30成分股)实战指南
大数据·服务器·数据库·区块链
阿巴~阿巴~2 小时前
Redis重大版本演进全解析:从2.6到7.0
服务器·数据库·redis·ubuntu·缓存·centos
qq_404643343 小时前
MySQL中RUNCATE、DELETE、DROP 的基本介绍
数据库·mysql
像风一样!4 小时前
MySQL数据库如何实现主从复制
数据库·mysql
大白的编程日记.4 小时前
【MySQL】数据库表的CURD(二)
android·数据库·mysql