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 + 1redis.call("INCRBY", key, 1)-- 設置過期時間redis.call("EXPIRE", key, 2)-- 返回(放行)return 1
end