laravel redis_如何将redis优化
Redis 單線程為什么還能這么快?
因為它所有的數據都在內存中,所有的運算都是內存級別的運算,而且單線程避免了多線程的切換性 能損耗問題。
Redis 單線程如何處理那么多的并發客戶端連接?
Redis的IO多路復用:redis利用epoll來實現IO多路復用,將連接信息和事件放到隊列中,依次放到 文件事件分派器,事件分派器將事件分發給事件處理器。
Redis 單線程為什么還能這么快?
因為它所有的數據都在內存中,所有的運算都是內存級別的運算,而且單線程避免了多線程的切換性 能損耗問題。
700粉絲福利安排一波,工作中準備的,大家隨便拿
程序猿的生活:【社群福利】30G-PHP進階資料,助力大家都能30K?zhuanlan.zhihu.comRedis 單線程如何處理那么多的并發客戶端連接?
Redis的IO多路復用:redis利用epoll來實現IO多路復用,將連接信息和事件放到隊列中,依次放到 文件事件分派器,事件分派器將事件分發給事件處理器。
其實對于redis來講,無論多少并發,到了redis層都會排隊,一個一個的來處理
Info: 查看redis服務運行信息,分為 9 大塊,每個塊都有非常多的參數,這 9 個塊分別是:
Server 服務器運行的環境參數Clients 客戶端相關信息Memory 服務器運行內存統計數據
Persistence 持久化信息Stats 通用統計數據Replication 主從復制相關信息 CPU CPU 使用情況
Cluster 集群信息KeySpace 鍵值對統計數量信息
緩存穿透
緩存穿透是指查詢一個根本不存在的數據, 緩存層和存儲層都不會命中, 通常出于容錯的考慮, 如果從存儲 層查不到數據則不寫入緩存層。
緩存穿透將導致不存在的數據每次請求都要到存儲層去查詢, 失去了緩存保護后端存儲的意義。
1. 解決:可以將空對象緩存起來或者設置一個特殊意義的字符串來標示此記錄數據庫中不存在,直接在緩存層返回
2. 布隆過濾器 對于惡意攻擊,向服務器請求大量不存在的數據造成的緩存穿透,還可以用布隆過濾器先做一次過濾,對于不 存在的數據布隆過濾器一般都能夠過濾掉,不讓請求再往后端發送。當布隆過濾器說某個值存在時,這個值可 能不存在;當它說不存在時,那就肯定不存在。
緩存失效
由于大批量緩存在同一時間失效可能導致大量請求同時穿透緩存直達數據庫,可能會造成數據庫瞬間壓力過大 甚至掛掉,對于這種情況我們在批量增加緩存時最好將這一批數據的緩存過期時間設置為一個時間段內的不同 時間。
int expireTime = new Random().nextInt(300) + 300;
bigkey
bigkey的壞處:
1. 帶寬固定,千兆網卡(按照字節來算是 128M/s),假設一個key的value大小為1M,有1000個連接并發,1s所占用的帶寬就是1000M,會造成網絡堵塞。
2. redis堵塞,單線程處理bigkey有可能造成其他連接排隊
在Redis中,一個字符串最大512MB,一個二級數據結構(例如hash、list、set、zset)可以存 儲大約40億個(2^32-1)個元素,但實際中如果下面兩種情況,我就會認為它是bigkey。
1. 字符串類型:它的big體現在單個value值很大,一般認為超過10KB就是bigkey。
2. 非字符串類型:哈希、列表、集合、有序集合,它們的big體現在元素個數太多。
一般來說,string類型控制在10KB以內,hash、list、set、zset元素個數不要超過5000(超過5000了可以采用分拆思想)
過期鍵清除策略
Redis對于過期鍵有三種清除策略:
· 被動刪除:當讀/寫一個已經過期的key時,會觸發惰性刪除策略,直接刪除掉這個過期key
· 主動刪除:由于惰性刪除策略無法保證冷數據被及時刪掉,所以Redis會定期主動淘汰一批已過期的key)
· 當前已用內存超過maxmemory限定時,觸發主動清理策略
主動清理策略又分五種
· allkeys-lru:根據LRU算法刪除鍵,不管數據有沒有設置超時屬性,直到騰出足夠空間 為止。
· allkeys-random:隨機刪除所有鍵,直到騰出足夠空間為止。
· volatile-random: 隨機刪除過期鍵,直到騰出足夠空間為止。
· volatile-ttl:根據鍵值對象的ttl屬性,刪除最近將要過期數據。如果沒有,回退到noeviction策略。 (常用)
· noeviction:不會剔除任何數據,拒絕所有寫入操作并返回客戶端錯誤信息"(error)OOM command not allowed when used memory",此時Redis只響應讀操作。
phper 在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那 里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、
高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql 優化、
shell 腳本、Docker、微服務、Nginx 等多個知識點高級進階干貨需要的可以免費分享給大家
這些的話是在下面的直播課中講解過很多期,并且在不斷更新中
大廠必備面試題,來拿吧!
程序猿的生活:PHP經典面試題集(含答案)?zhuanlan.zhihu.com以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的官方群點擊此處。
總結
以上是生活随笔為你收集整理的laravel redis_如何将redis优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js用递归遍历多维数组_js面试题更新之
- 下一篇: git config设置用户名_hexo