激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - Redis正確使用的十個技巧

Redis正確使用的十個技巧

2019-10-26 20:10Redis教程網 Redis

Redis已經走過了很長的一段路,隨之而來的一系列最佳實踐,使得大多數人可以正確地使用Redis,下面我們將探索正確使用 Redis 的10個技巧。

Redis 在當前的技術社區里是非常熱門的。從來自 Antirez 一個小小的個人項目到成為內存數據存儲行業的標準,Redis已經走過了很長的一段路。

1、停止使用 KEYS *

Okay,以挑戰這個命令開始這篇文章,或許并不是一個好的方式,但其確實可能是最重要的一點。很多時候當我們關注一個redis實例的統計數據, 我們會快速地輸入”KEYS *”命令,這樣key的信息會很明顯地展示出來。平心而論,從程序化的角度出發往往傾向于寫出下面這樣的偽代碼:

  1. for key in 'keys *':  
  2.  doAllTheThings() 

但是當你有1300萬個key時,執行速度將會變慢。因為KEYS命令的時間復雜度是O(n),其中n是要返回的keys的個數,這樣這個命令的復雜度就取決于數據庫的大小了。并且在這個操作執行期間,其它任何命令在你的實例中都無法執行。

作為一個替代命令,看一下 SCAN 吧,其允許你以一種更友好的方式來執行… SCAN 通過增量迭代的方式來掃描數據庫。這一操作基于游標的迭代器來完成的,因此只要你覺得合適,你可以隨時停止或繼續。

2、找出拖慢 Redis 的罪魁禍首

由于 Redis 沒有非常詳細的日志,要想知道在 Redis 實例內部都做了些什么是非常困難的。幸運的是 Redis 提供了一個下面這樣的命令統計工具:

  1. 127.0.0.1:6379> INFO commandstats  
  2. # Commandstats  
  3. cmdstat_get:calls=78,usec=608,usec_per_call=7.79  
  4. cmdstat_setex:calls=5,usec=71,usec_per_call=14.20  
  5. cmdstat_keys:calls=2,usec=42,usec_per_call=21.00  
  6. cmdstat_info:calls=10,usec=1931,usec_per_call=193.10  

通過這個工具可以查看所有命令統計的快照,比如命令執行了多少次,執行命令所耗費的毫秒數(每個命令的總時間和平均時間)

只需要簡單地執行 CONFIG RESETSTAT 命令就可以重置,這樣你就可以得到一個全新的統計結果。

3、將 Redis-Benchmark 結果作為參考,而不要一概而論

Redis 之父 Salvatore 就說過:“通過執行GET/SET命令來測試Redis就像在雨天檢測法拉利的雨刷清潔鏡子的效果”。很多時候人們跑到我這里,他們想知道為什么自己的 Redis-Benchmark統計的結果低于最優結果 。但我們必須要把各種不同的真實情況考慮進來,例如:

可能受到哪些客戶端運行環境的限制?

是同一個版本號嗎?

測試環境中的表現與應用將要運行的環境是否一致?

Redis-Benchmark的測試結果提供了一個保證你的 Redis-Server 不會運行在非正常狀態下的基準點,但是你永遠不要把它作為一個真實的“壓力測試”。壓力測試需要反應出應用的運行方式,并且需要一個盡可能的和生產相似的環境。

4、Hashes 是你的最佳選擇

以一種優雅的方式引入 hashes 吧。hashes 將會帶給你一種前所未有的體驗。之前我曾看到過許多類似于下面這樣的key結構:

  1. foo:first_name  
  2. foo:last_name  
  3. foo:address  

上面的例子中,foo 可能是一個用戶的用戶名,其中的每一項都是一個單獨的 key。這就增加了 犯錯的空間,和一些不必要的 key。使用 hash 代替吧,你會驚奇地發現竟然只需要一個 key :

  1. 127.0.0.1:6379> HSET foo first_name "Joe"  
  2. (integer) 1  
  3. 127.0.0.1:6379> HSET foo last_name "Engel"  
  4. (integer) 1  
  5. 127.0.0.1:6379> HSET foo address "1 Fanatical Pl"  
  6. (integer) 1  
  7. 127.0.0.1:6379> HGETALL foo  
  8. 1) "first_name"  
  9. 2) "Joe"  
  10. 3) "last_name"  
  11. 4) "Engel"  
  12. 5) "address"  
  13. 6) "1 Fanatical Pl"  
  14. 127.0.0.1:6379> HGET foo first_name  
  15. "Joe"  

5、設置 key 值的存活時間

無論什么時候,只要有可能就利用key超時的優勢。一個很好的例子就是儲存一些諸如臨時認證key之類的東西。當你去查找一個授權key時——以 OAUTH為例——通常會得到一個超時時間。這樣在設置key的時候,設成同樣的超時時間,Redis就會自動為你清除!而不再需要使用KEYS *來遍歷所有的key了,怎么樣很方便吧?

6、選擇合適的回收策略

既然談到了清除key這個話題,那我們就來聊聊回收策略。當 Redis 的實例空間被填滿了之后,將會嘗試回收一部分key。根據你的使用方式,我強烈建議使用 Volatile-lru 策略——前提是你對key已經設置了超時。但如果你運行的是一些類似于 cache 的東西,并且沒有對 key 設置超時機制,可以考慮使用 allkeys-lru 回收機制。我的建議是先在這里查看一下可行的方案。

7、如果你的數據很重要,請使用 Try/Except

如果必須確保關鍵性的數據可以被放入到 Redis 的實例中,我強烈建議將其放入 try/except 塊中。幾乎所有的Redis客戶端采用的都是“發送即忘”策略,因此經常需要考慮一個 key 是否真正被放到 Redis 數據庫中了。至于將 try/expect 放到 Redis 命令中的復雜性并不是本文要講的,你只需要知道這樣做可以確保重要的數據放到該放的地方就可以了。

8、不要耗盡一個實例

無論什么時候,只要有可能就分散多redis實例的工作量。從3.0.0版本開始,Redis就支持集群了。Redis集群允許你基于key范圍分離出部分包含主/從模式的key。完整的集群背后的“魔法”可以在這里找到。但如果你是在找教程,那這里是一個再適合不過的地方了。如果不能選擇集群,考慮一下命名空間吧,然后將你的key分散到多個實例之中。關于怎樣分配數據,在redis.io網站上有這篇精彩的評論。

9、內核越多越好嗎?

當然是錯的。Redis 是一個單線程進程,即使啟用了持久化最多也只會消耗兩個內核。除非你計劃在一臺主機上運行多個實例——希望只會是在開發測試的環境下!——否則的話對于一個 Redis 實例是不需要2個以上內核的。

10、高可用

到目前為止 Redis Sentinel 已經經過了很全面的測試,很多用戶已經將其應用到了生產環境中(包括 ObjectRocket )。如果你的應用重度依賴于 Redis ,那就需要想出一個高可用方案來保證其不會掉線。當然,如果不想自己管理這些東西,ObjectRocket 提供了一個高可用平臺,并提供7×24小時的技術支持,有意向的話可以考慮一下。

以上就是關于Redis正確使用的十個技巧,希望對大家的學習有所幫助,果斷收藏吧

延伸 · 閱讀

精彩推薦
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
主站蜘蛛池模板: 久久久久久久久国产 | 久久久国产精品视频 | www.91视频com| 成人午夜视频在线观看免费 | 日本在线免费观看视频 | 失禁高潮抽搐喷水h | 欧洲色阁中文字幕 | 久久人人人| 精品亚洲二区 | h网站在线观看 | 成人毛片av在线 | 国产精品久久久久久婷婷天堂 | 久久激情小视频 | 婷婷亚洲一区二区三区 | 国产乱淫av一区二区三区 | 久久久久北条麻妃免费看 | 999久久久国产999久久久 | 成年人在线视频免费 | 久久精品久久精品久久精品 | 一级性色| 最新黄色电影网站 | 今井夏帆av一区二区 | 成人免费淫片视频软件 | 二级大黄大片高清在线视频 | 亚洲爱爱网站 | 法国极品成人h版 | 午夜视频在线免费观看 | 一区二区三区日韩 | 欧美性生活免费视频 | 日韩aⅴ一区二区三区 | 久久久人成影片一区二区三区 | 狠狠干视频网站 | 久久网国产 | 一级黄色在线观看 | 一边吃奶一边插下面 | 草久在线观看视频 | 人人舔人人舔 | 天海翼无删减av三级在线观看 | 黑人一区二区三区四区五区 | 日韩视频一区 | 在线播放av网址 |