安裝英偉顯示卡,出現報錯總結
Redis入門
概述
redis是什麼
Redis(Remote Dictionary Server ),即遠端字典服務,是一個開源的使用ANSI C語言]編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。當下最熱門的NoSQL技術之一,也被人們稱之為結構化資料庫。
redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。
Redis能做什麼
- 記憶體儲存、持久化。記憶體是斷電即失,所以說持久化很重要(RDB,AOF)
- 效率高,可以用於快取記憶體
- 釋出訂閱系統
- 地圖資訊分析
- 計時器、計數器(瀏覽量)
- ......
特性
- 多樣的資料型別
- 持久化
- 叢集
- 事務
- ......
學習中需要用到的東西
-
狂神的公眾號:狂神說
-
redis官網:https://redis.io
-
下載
注意:Windows在GitHub上下載(停更很久了),不建議在Windows上使用。
-
在Linux上安裝
yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils #scl命令啟用只是臨時的,退出shell或重啟就會恢復原系統gcc版本。 scl enable devtoolset-9 bash make install PREFIX=/usr/local/redis vim redis.conf mkdir pid logs mkdir -p /data/redis make install PREFIX=/usr/local/redis vim /etc/profile export REDIS=/usr/local/redis export PATH=:$PATH:$REDIS/bin source /etc/profile
- 啟動......
- 退出......
簡單測試效能
# 測試:100個併發 100000個請求
80.32% <= 1 milliseconds
95.21% <= 2 milliseconds
99.40% <= 3 milliseconds
99.89% <= 4 milliseconds
100.00% <= 4 milliseconds
105152.48 requests per second
-
檢視redis相關屬性
redis有16個數據庫,預設使用第0個,可以用select來切換。
-
基本命令
# 生產環境不要用,檢視所有的key keys * # set key value set name xxx # get key get name # 選擇資料庫 select index # 清空所有資料庫 flushall # 清單當前資料庫 flushdb
效能分析
redis在6版本以前是單執行緒,在6版本的時候,是多執行緒了。
redis是基於記憶體操作,CPU不是redis的效能瓶頸,redis的效能瓶頸是根據機器的記憶體和網路頻寬來決定的。
為什麼單執行緒還這麼快?
redis是C語言寫的,官方提供的資料是10w+的QPS。
誤區:
- 高效能的伺服器一定是多執行緒的?
- 多執行緒(CPU會上下文切換,耗時的操作)一定比單執行緒效率高?
核心:redis是將所有的資料全部放在記憶體中,所以說單執行緒效率就是最高的。IO多路複用。多執行緒,對於記憶體系統來說,如果沒有上下文切換,效率就是最高的,多次讀寫都是在一個CPU上的,在記憶體情況下,這個就是最佳的方案。
I/O多路複用
I/O 多路複用模型
I/O 多路複用模型是利用 select、poll、epoll 可以同時監察多個流的 I/O 事件的能力,在空閒的時候,會把當前執行緒阻塞掉,當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll 是隻輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。
這裡“多路”指的是多個網路連線,“複用”指的是複用同一個執行緒。採用 I/O 多路複用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路 IO 的時間消耗),且 Redis 在記憶體中操作資料的速度非常快,也就是說記憶體內的操作不會成為影響Redis效能的瓶頸,主要由以上幾點造就了 Redis 具有很高的吞吐量。