【Redis 系列】redis 學習二

小魔童哪吒發表於2022-01-13

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

window 下安裝 Redis

1、官網上下載 windows Redis 的安裝包:https://github.com/tporadowsk...

Redis-x64-5.0.10.zip

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、官網下載安裝包:https://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
-k1=keep alive 0=reconnect1
-rSET/GET/INCR 使用隨機 key, SADD 使用隨機值
-P通過管道傳輸 <numreq> 請求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 的上下文切換,對於記憶體而言,沒有上下文切換系統效率是最高的

歡迎點贊,關注,收藏

朋友們,你的支援和鼓勵,是我堅持分享,提高質量的動力

好了,本次就到這裡

技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。

我是小魔童哪吒,歡迎點贊關注收藏,下次見~

相關文章