Redis 是什麼?
Redis(Remote Dictionary Service),遠端字典服務
是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API
Redis 是免費且開源的,是當下最熱門的 Nosql 技術之一,他也被成為結構化資料庫
Redis 支援的語言有這麼多
Redis 會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並在此基礎上實現 master - slave (主從同步)
Redis 能幹嘛?
Redis 能幹的事情非常的多,我們們列舉一些:
- 記憶體儲存,持久化。 資料儲存在記憶體中,若服務崩潰或者伺服器當機,記憶體中的資料就會丟失, 持久化相當重要,Redis 裡面的持久化有 RDB,AOF
- 可以用於快取記憶體,Redis 效率很高
- 做釋出訂閱系統
- 做地圖資訊分析
- 做計數器,計時器 等等
Redis 有啥特性
- 多樣的資料型別
- 持久化
- 叢集
- 事務處理
學習 Redis 需要用到的資料
- 官網:redis.io/
- 中文網站:www.redis.cn/
- 下載地址:
如何安裝 Redis
window 下安裝 Redis
1、官網上下載 windows Redis 的安裝包:github.com/tporadowski/redis/relea...
2、解壓安裝包
解壓 zip 安裝包 Redis-x64-5.0.10.zip,這個壓縮包現在有 14 M了
- redis-server
redis 服務端
- redis-client
redis 客戶端
- redis-check-aof 和 redis-check-rdb
redis 的持久化工具
- redis-benchmark
redis 的檢測工具
3、開啟 redis-server 進入服務端,可以看到如下介面
4、開啟客戶端 redis-cli ,可以嘗試輸入 ping
命令,得到結果為 PONG
說明連線成功
嘗試 set key
和get key
,沒有問題
這裡只是簡單介紹一下 windows 下 redis 的安裝和使用, 其實絕大部分的時間我們還是在 linux 下進行操作的,Redis 官網也是強烈建議我們在 Linux 下進行使用
linux 下安裝 Redis
1、官網下載安裝包:redis.io/
redis-6.2.5.tar.gz , 並放到自己的 linux 環境下
2、解壓,tar xvf redis-6.2.5.tar.gz
也可以解壓到指定的目錄下,例如 tar xvf redis-6.2.5.tar.gz -C /usr/local/redis
3、進入 redis-6.2.5 ,進行原始碼編譯 執行make && make install
4、設定後臺啟動
修改目錄下的 redis.conf
5、啟動 redis-server,並啟動 redis-cli 連線服務端
root@iZuf66y3tuzn4wp3h02t7pZ:/# redis-server /usr/local/redis/redis-6.2.5/redis.conf
root@iZuf66y3tuzn4wp3h02t7pZ:/# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>hmset config name xiaomotong age 18
127.0.0.1:6379> hgetall config
1) "name"
2) "xiaomotong"
3) "age"
4) "18"
nice ,安裝 ok ,並且設定值也是 ok 的
7、檢查 reids-server 程式是否存在
ps aux |grep redis
檢視程式是否存在即可
8、關閉 redis 服務
127.0.0.1:6379> shutdown
not connected>
not connected>
root@iZuf66y3tuzn4wp3h02t7pZ:/# ps aux |grep redis
root 15903 0.0 0.0 14436 1012 pts/0 S+ 22:38 0:00 grep --color=auto redis
如何測試 redis 效能
使用 redis-benchmark 測試 redis 效能 ,有如下引數可以使用
選項 | 描述 | 預設值 |
---|---|---|
-h | 指定伺服器主機名 | 127.0.0.1 |
-p | 指定伺服器埠 | 6379 |
-s | 指定伺服器 socket | |
-c | 指定併發連線數 | 50 |
-n | 指定請求數 | 10000 |
-d | 以位元組的形式指定 SET/GET 值的資料大小 | 3 |
-k | 1=keep alive 0=reconnect | 1 |
-r | SET/GET/INCR 使用隨機 key, SADD 使用隨機值 | |
-P | 通過管道傳輸 請求 | 1 |
-q | 強制退出 redis。僅顯示 query/sec 值 | |
–csv | 以 CSV 格式輸出 | |
-l\(L 的小寫字母) | 生成迴圈,永久執行測試 | |
-t | 僅執行以逗號分隔的測試命令列表。 | |
-I\(i 的大寫字母) | Idle 模式。僅開啟 N 個 idle 連線並等待。 |
開始測試
# redis-benchmark -h localhost -p 6379 -c 1000 -n 1000000
可以看到如下列印資訊
26.27 秒 完成了 一百萬次的請求
1000 個客戶端併發
以位元組的形式指定設定 3 個位元組的資料大小
通過上圖我們可以看出,本次 redis 測試的效能,每秒能夠處理 38066.23 個請求,對於單機的 redis 已經是相當厲害了
redis 基礎知識
redis 預設是有 16 個資料庫的,我們們可以檢視 redis.conf 檔案中有定義
# vim /usr/local/redis/redis-6.2.5/redis.conf
redis 預設是使用第 0 個資料庫,我們們可以使用 select
指令來切換資料庫
select
可以通過 select
指令來切換資料庫
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> DBSIZE
(integer) 0
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> dbsize
(integer) 5
可以看到 0 號資料庫是有資料的, 3 號資料庫還沒有資料
keys
可以通過 keys *
指令來獲取當前資料庫所有 key , 一般很少用這個命令,因為資料量很大的時候,使用這個命令會很慢
127.0.0.1:6379> keys *
1) "config"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "myhash"
5) "name"
flushdb
清空當前資料庫的 key 和 value
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
flushall
清空所有資料庫的 key 和 value
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> dbsize
(integer) 0
127.0.0.1:6379[2]> set name xiaomotong
OK
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> dbsize
(integer) 0
那麼為什麼 redis 的預設埠號是 6379 呢?
因為 redis 的作者是一個女明星 MERZ 的粉絲,MERZ 對應到 9 宮格手機鍵盤上就是 6379
redis 是單執行緒的
redis 是單執行緒的,但是不影響他很快,官方表示,redis 是基於記憶體操作的,CPU 不是 redis 的瓶頸,機器記憶體和網路頻寬才是 redis 的瓶頸。
redis 是 C 語言寫的,redis 官方提供的資料為 十萬+ QPS
redis 單執行緒為什麼這麼快?
1、高效能的伺服器一定是多執行緒的嗎?這是一個誤區,單執行緒一樣可以非常快
2、多執行緒的效率一定比單執行緒的效率高嗎?這也是一個誤區,多執行緒會有 CPU 上下文切換,非常耗時
效率比較: CPU > 記憶體 > 硬碟
redis 核心:
redis 是將所有的資料都放到記憶體中,所以單執行緒去運算元據就會非常快,效率就很高,而多執行緒會出現 CPU 的上下文切換,對於記憶體而言,沒有上下文切換系統效率是最高的
歡迎點贊,關注,收藏
朋友們,你的支援和鼓勵,是我堅持分享,提高質量的動力
好了,本次就到這裡
技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。
我是小魔童哪吒,歡迎點贊關注收藏,下次見~
本作品採用《CC 協議》,轉載必須註明作者和本文連結