iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
自我挑戰組

月光下的Flask之旅系列 第 26

Day 26 Redis (下)

上一篇我們只簡單介紹了 Redis ,這篇就來詳細的介紹一下以及如何再 Flask 中使用。

Redis 詳細介紹

Redis 中 Key 可以為 String 結構;Value 可以為 Strings 、 Lists 、 Sets 、 Hashes 及 Sorted sets 。Redis 還可以設定過期時間以及其他的設定(Redis 還可以寫腳本,還能開頻道及訂閱???),不過大概理解 Redis 是以 Key-Value 為結構存在在記憶體,以及是以呼叫 Key 取得 Value 的狀態取值就可以了(雖然底層沒有這麼單純就是了,底層大概有 10 種類型)。

Data types

在官網的說明中 String 為最基礎的型態,可以存放 binary, string, integer, float 之類的資料,,單一個 Key 可以存放 512MB 的資料。

接著是 Lists ,Lists 就是 Strings 的列表(有順序,相當於 Python 中的 List),單一個 Key 可以存放最大長度為 2^32^ - 1 (4,294,967,295 或者說 42 億左右)的 Lists。

再來是 Sets ,Sets 是 Strings 的集合(無順序,相當於 Python 中的 set),且不允許同樣的內容重複存在,單一個 Key 可以存放最多為 2^32^ - 1 (4,294,967,295 或者說 42 億左右)個成員。

還有 Hashes ,Hashes 是 string 與 string 的映射(相當於 Python 中的 dict,可以一對多,用空格隔開,若資料本身有空格,可用雙引號刮起來),單一個 Key 可以存放最多為 2^32^ - 1 (4,294,967,295 或者說 42 億左右)個键值對。

最後是 Sorted sets ,Sorted sets 跟 Sets 差不多,不過 Sorted sets 需要給每一筆資料一個 double 類型的分數,然後依照這個分數對所有資料排序,一樣不允許同樣的內容重複存在,不過分數可以重複,單一個 Key 可以存放最多為 2^32^ - 1 (4,294,967,295 或者說 42 億左右)個成員。

flask-redis

如果要使用 flask-redis 這個 Flask 的插件的話,需要先安裝 flask-redis 這個插件,安裝的方式還是老樣子。

$ pipenv install flask-redis

安裝好了之後,就可以來看如何使用了。架構大概長這樣:

ithome_redis
├── app.py  # 主要的檔案
├── config.py  # 設定檔
├── Pipfile  # 不管它,建立虛擬環境時自己會出現
└── Pipfile.lock  # 不管它,安裝套件時自己會出現

這個插件需要設定一個 REDIS_URL 的參數,設定規則大概是這樣:

REDIS_URL = "redis:// [: password@] host [: port] [/ database][? [timeout=timeout[d|h|m|s|ms|us|ns]] [&database=database]]"

host 就是本機,所以填 'localhost'
port 是預設的 port ,所以填 6379
database 就選擇第一個,所以填 0
其他沒有用到就不填

所以 REDIS_URL 最後變這樣:

REDIS_URL = "redis://localhost:6379/0"

然後就來設定其他東西啦。

app.py

from flask import Flask
from flask_redis import FlaskRedis  # 增加這行

import configs


app = Flask(__name__)
app.config.from_object(configs.DevelopmentConfig)
# 剛剛的設定參數
app.config['REDIS_URL'] = "redis://localhost:6379/0"

r = FlaskRedis(app)
r.set('test', 0)


@app.route('/')
def index():
    r.incr('test')
    test = r.get('test')
    return test


if __name__ == '__main__':
    app.run()

接著啟動 redis-server (切到 redis-stable 裡面輸入 src/redis-server),再啟動 Flask (不照這個順序會報錯,以及要開一個新的 terminal 去啟動 Flask 喔,不要傻傻的關掉 redis-server),然後打開瀏覽器,輸入 http://localhost:5000 就可以看到了,然後多按幾次 F5 重新更新一下瀏覽器,就會看到數字在不斷的更新了。

redis-py

如果使用 redis-py 的套件的話,需要先安裝 redis-py 這個套件,不過安裝的名稱有點不一樣。

$ pipenv install redis

如果安裝好了之後,就可以來看如何使用了。架構大概長這樣:

ithome_redis
├── app.py  # 主要的檔案
├── config.py  # 設定檔
├── Pipfile  # 不管它,建立虛擬環境時自己會出現
└── Pipfile.lock  # 不管它,安裝套件時自己會出現

app.py

from flask import Flask
from redis import Redis  # 增加這行

import configs


app = Flask(__name__)
app.config.from_object(configs.DevelopmentConfig)

# 連接本地的 redis server,埠號 6379,連接 0 號資料庫
r = Redis(host='localhost', port=6379, db=0)

# 設定資料 key => test, value => 0
r.set('test', 0)


@app.route('/')
def index():
    # key 為 test 的資料 +1
    r.incr('test')
    # 取得 test 的資料
    test = r.get('test')
    return test


if __name__ == '__main__':
    app.run()

接著跟上面一樣啟動 redis-server ,再啟動 Flask ,最後再開啟瀏覽器,輸入 http://localhost:5000 並且不斷按 F5 重新載入就可以看到跟上面同樣的畫面了(因為兩個套件只是用法稍微不太一樣而已,功能還是相同的)。

這樣就大概是 redis 的基本使用了。

參考資料

Redis DataType 介紹

那麼就大概這樣,Redis 通常不會直接使用它,而是做為其它套件的存儲東西使用(像是快取暫存或是任務隊列),所以 Redis 沒有對它有很詳細的介紹,絕對不是我偷懶啦。

大家掰~掰~


上一篇
Day 25 Redis (上)
下一篇
Day 27 Celery
系列文
月光下的Flask之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言