Redis作為快取時的一些使用經驗

2021-09-10 13:55:03 字數 773 閱讀 9243

redis作為nosql資料庫,經常用作快取,所以推薦將那些經常查詢的資料存入redis中方便下次快速獲取。但redis沒有像關係型資料庫那樣擁有結構化的查詢語言,如果快取了很多資料,想從中獲取滿足某些條件的資料時,該如何做呢?

如果把這些海量資料從redis裡拿出來,逐個遍歷篩選出滿足條件的資料,這肯定不可行!

可以通過在把這些海量資料存入redis時,把滿足各種條件的資料的key同時也存入redis的set型別中就可以方便下次根據這些條件查詢了。

比如user表的資料經常被以年齡為25並且性別為男的條件來進行查詢,而且user表的資料很多比如有500w條,那麼我們通常會把所有user表的資料存入到redis的hash型別中,該hash型別資料的集合名稱為user表的表名比如"sys_user_table",裡面每條資料的key是該條資料的id值,value是該條資料的json字串。同時我們將滿足年齡為25的資料的id存入key為"sys_user_age_25"的set型別中,把滿足性別為男的資料的id存入key為"sys_user_***_m"的set型別中。這樣當要查詢年齡為25並且性別為男的user時,可以通過將sys_user_age_25和sys_user_***_m這兩個set集合取交集,再從sys_user_table中獲取key在這個交集中的資料即可。

取交集就是"與"關係,取並集就是"或"關係,利用這兩點可以滿足類似關係型資料庫中根據where條件進行簡單查詢的場景。當然redis畢竟是nosql,太複雜的查詢肯定做不了,也不推薦做,所以盡量在redis中存的資料就是你想要的資料,換句話說這些資料本身就是滿足這些條件的查詢結果。

使用Redis作為LRU快取

當 redis 作為快取使用時,當你新增新的資料時,有時候很方便使 redis 自動 老的資料。lru 實際上是被唯一支援的資料移除方法。redis 的 maxmemory 指令,用於限制記憶體使用到乙個固定的容量,也包含深入 redis 使用的 lru 演算法,乙個近似準確的 lru。maxmem...

redis故障時的一些概念

概念 訪問乙個不存在的key,快取不起作用,請求會穿透到db,流量大時db會掛掉。解決方案 採用布隆過濾器,使用乙個足夠大的bitmap,用於儲存可能訪問的key,不存在的key直接被過濾 訪問key未在db查詢到值,也將空值寫進快取,但可以設定較短過期時間。概念大量的key設定了相同的過期時間,導...

快取使用的一些總結

快取 快取好處 加速讀寫 降低後端負載 例如很複雜的sql 加速請求響應,對資料快取,例如redis可以達到萬次的讀寫速度 成本 資料不一致,快取與資料庫的資料不一致 跟更新策略有關係 成本 需要處理快取與資料庫層的邏輯,增加 運維成本增加 更新策略 lru 最近最少訪問 lfu 訪問頻率,最少訪問...