Redis高併發可能產生的問題即個人見解解決方案

2021-08-18 22:48:52 字數 1274 閱讀 8809

1、  如果redis宕機了,或者鏈結不上,怎麼辦?

解決方法:

②如果最壞的情況,只能關閉redis連線,去往資料庫連線。但由於資料量大,這樣sql資料庫也會宕掉的。

2、  如果redis快取在高峰期到期失效,在這個時刻請求會向雪崩一樣,直接訪問資料庫如何處理?

設定條件查詢判斷,判斷redis快取裡是否有資料,如果沒有,則去往資料庫連線。當然要加分布式鎖,利用redis的單執行緒+多路io復用技術,原子性原理,讓其它的執行緒請求等待,假若第乙個執行緒進去獲取到分布式鎖在查詢資料的途中宕掉了,不能讓其它執行緒一直等待,設定等待一定時間判斷是否取回資料,如果沒有,遞迴呼叫自己的方法讓第二個執行緒繼續拿分布式鎖查詢資料庫。當第二個鎖從資料庫拿到資料時,把資料值設定到redis資料庫快取中,設定失效時間,避免佔記憶體,方便使用提高效率。

3.   如果使用者不停地查詢一條不存在的資料,快取沒有,資料庫也沒有,那麼會出現什麼

如果資料不存在,快取中沒有,資料庫也沒有,當然如果不設定判斷,會一直呼叫資料庫,使資料庫效率降低,訪問量大時甚至會宕機。

解決方案:從資料庫查詢,如果資料庫沒有,則返回值為null,判斷資料庫返回的值,如果為null,則自定義把標識的字段存到redis中,用key,value的方法,jedis.setex(key,"empty"),設定失效時間跟具體情況而定,然後呼叫string json=jedis.get(key),判斷是否獲取的值"empty".equal(json),如果相等,則拋出自定義異常,給使用者提示,或者直接return null。這樣使用者再次查詢的時候由於先從reids快取中查詢,redis會有對應的key獲取之前設定的value值,這樣就不會再次呼叫資料庫,影響效率等問題。

具體**如下:

public

skuinfo

getskuinfo(string

skuid)

skuinfojson =

json

.tojsonstring(skuinfo);

jedis.setex(skuinfokey, jedisconst

.time_out, skuinfojson);

jedis.close();

return skuinfo;

} else

}else

if (skuinfojson.equals("empty"

))else

}catch (jedisconnectionexception e) catch (interruptedexception e)

return getskuinfodb(skuid);

Redis高併發問題

商品搶購秒殺等活動 使用redis列表結構實現佇列資料結構,強拆的用rpush入隊,再用lpop出隊.redis宕機或者連線不上 解決方法 配置主從複製,配置哨兵模式,一旦發現主機宕機,讓下乙個從機當做主機。最壞的情況,只能關閉redis連線,去往資料庫連線。但由於資料量大,這樣sql資料庫也會宕掉...

併發產生的問題

我們只是spring容器中的物件預設都是單例的,比如 當兩個請求同時訪問同乙個controller的方法,tomcat會分配兩個執行緒去執行這兩個方法 執行緒的執行方式是高頻率的切換 比如我們在controller中如果有成員變數就會造成併發問題 問題背景 我們public class redisc...

Redis高併發和高可用

如何保證 redis 的高併發和高可用?redis 的主從複製原理能介紹一下麼?redis 的哨兵原理能介紹一下麼?其實問這個問題,主要是考考你,redis 單機能承載多高併發?如果單機扛不住如何擴容扛更多的併發?redis 會不會掛?既然 redis 會掛那怎麼保證 redis 是高可用的?其實針...