1. 程式人生 > 實用技巧 >redis的三種連線方式

redis的三種連線方式

相信大家曾經都有過這樣的經歷:註冊某個網站時,通過點選獲取簡訊驗證碼,而驗證碼會一般會有60秒的超時時間限制,即:60s之後簡訊驗證碼失效,需重新獲取驗證碼。

剛才說的簡訊驗證碼失效的事 和 今天的話題redis有什麼關係呢?

redis是一個軟體,他恰好提供了一個可以設定值並允許設定超時時間的功能,例如:

例如:我在redis中設定一個 鍵 值 並指定超時時間為 10 秒,簡化之後可以這樣實現 conn.set("15131255089",9871,10),之後還可以根據 鍵 再可以去獲取對應的值 value = conn.get("15131255089"),如果已超時則獲取的值為空。

so,今天要給大家先聊聊redis,這樣以後在專案中我們就可以用上他了。

宣告:redis中要學的知識點非常多,而這些redis專項內容會在咱們之後的Linux架構的課程中詳細講解,本節主要以“簡訊超時”功能為目的來講解。

1. 什麼是redis?

官方:Redis是一個使用 C語言 編寫的開源、支援網路、基於記憶體、可選永續性的鍵值對儲存資料庫。
白話:Redis是一個軟體,這個軟體可以幫助我們維護一部分記憶體,讓我們往那塊記憶體中進行存取值。如果資料在記憶體中儲存,遇到宕機那麼資料就會丟失,而redis解決了這個問題,他可以將記憶體中的資料以某種策略儲存到硬碟,以保證宕機資料不丟失。

Redis和MySQL資料庫的比較?

redis,直接在記憶體中進行存取資料,速度非常快;由於在記憶體,所以儲存的資料不能太多,記憶體一般8G/16G;對資料可以設定自動超時時間;mysql,通過SQL語句操作的資料都在硬碟上,速度相對慢;由於儲存在硬碟,所以儲存的資料可以非常多,硬碟一般500G/1T;資料不能自動超時,想超時需要自定寫SQL處理;

2. 安裝redis

由於目前同學們還未接觸過 Linux 作業系統,所以大家可以先安裝到windows系統上來進行學習。

注意:以後在工作中使用到redis時,都是需要安裝在Linux作業系統上,咱們後期Linux架構課程會單獨講解Linux並帶著大家手把手搭建redis和高可用及叢集等。

2.1 下載redis

選擇最新穩定版安裝,地址:https://github.com/microsoftarchive/redis/releases

提醒:截止目前redis穩定版本已到 5.0 ,由於windows實際應用不多,所以版本就比較滯後。

2.2 安裝redis

找到已下載好的安裝包,根據下圖的提示按步驟點選執行即可。

最後點選next就開始安裝,直至安裝成功,成功之後所有redis相關安裝的視窗都會自動關閉。

2.3 修改配置

redis這個軟體安裝上之後,需要對他進行一些基本設定,以便於我們以後可以通過python程式碼來對redis中的資料進行操作。

  • 開啟配置檔案,redis安裝的目錄下的 redis.windows-service.conf 檔案

  • 修改配置

    • 設定繫結IP,如果想要讓區域網內其他主機訪問自己的redis,需要設定 bind 0.0.0.0

    • 設定redis密碼,如果想需要提供密碼再登入redis,需要設定 requirepass 密碼

2.4 啟動redis

安裝和配置完成之後,需要啟動redis。

  • 開啟電腦的【控制面板】,然後選擇【管理工具】,在選擇【服務】

  • 啟動 或 關閉,在右邊找到並選中redis服務,然後點選 重啟動 或 關閉

3. redis-cli連線redis

redis安裝並啟動之後,就可以通過各種客戶端連線redis並做各種操作。

redis-cli是安裝上redis之後自帶的客戶端工具,他可以讓我們快速通過命令對redis操作。

在windows中開啟終端,輸入 redis-cli 就可以使用這個客戶端了。例如:

4. python連線redis

python程式碼也可以實現連線redis並對redis中進行各種操作。python程式碼想要操作redis必須先安裝相關模組。

提示:在安裝redis的主機上執行 ipconfig 獲取redis的IP(windows系統)

第一步:安裝python操作redis模組

pip3 install redis

第二步:寫程式碼去操作redis

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
# 直接連線redis
conn = redis.Redis(host='10.211.55.28', port=6379, password='foobared', encoding='utf-8')
# 設定鍵值:15131255089="9999" 且超時時間為10秒(值寫入到redis時會自動轉字串)
conn.set('15131255089', 9999, ex=10)
# 根據鍵獲取值:如果存在獲取值(獲取到的是位元組型別);不存在則返回None
value = conn.get('15131255089')
print(value)

上面python操作redis的示例是以直接建立連線的方式實現,每次操作redis如果都重新連線一次效率會比較低,建議使用redis連線池來替換,例如:

import redis
# 建立redis連線池(預設連線池最大連線數 2**31=2147483648)
pool = redis.ConnectionPool(host='10.211.55.28', port=6379, password='foobared', encoding='utf-8', max_connections=1000)
# 去連線池中獲取一個連線
conn = redis.Redis(connection_pool=pool)
# 設定鍵值:15131255089="9999" 且超時時間為10秒(值寫入到redis時會自動轉字串)
conn.set('name', "武沛齊", ex=10)
# 根據鍵獲取值:如果存在獲取值(獲取到的是位元組型別);不存在則返回None
value = conn.get('name')
print(value)

5. django連線redis

按理說搞定上一步python程式碼操作redis之後,在django中應用只需要把上面的程式碼寫到django就可以了。

例如:django的檢視函式中操作redis

import redis
from django.shortcuts import HttpResponse
# 建立redis連線池
POOL = redis.ConnectionPool(host='10.211.55.28', port=6379, password='foobared', encoding='utf-8', max_connections=1000)
def index(request):
    # 去連線池中獲取一個連線
    conn = redis.Redis(connection_pool=POOL)
    conn.set('name', "武沛齊", ex=10)
    value = conn.get('name')
    print(value)
    return HttpResponse("ok")

上述可以實現在django中操作redis。但是,這種形式有點非主流,因為在django中一般不這麼幹,而是用另一種更加簡便的的方式。

第一步:安裝django-redis模組(內部依賴redis模組)

pip3 install django-redis

第二步:在django專案的settings.py中新增相關配置

# 上面是django專案settings中的其他配置....
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://10.211.55.28:6379", # 安裝redis的主機的 IP 和 埠
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {
                "max_connections": 1000,
                "encoding": 'utf-8'
            },
            "PASSWORD": "foobared" # redis密碼
        }
    }
}

第三步:在django的檢視中操作redis

from django.shortcuts import HttpResponse
from django_redis import get_redis_connection
def index(request):
    # 去連線池中獲取一個連線
    conn = get_redis_connection("default")
    conn.set('nickname', "武沛齊", ex=10)
    value = conn.get('nickname')
    print(value)
    return HttpResponse("OK")

寫在最後

至此,就是本節的所有內容,大家可以在django中通過redis進行存取值,在後續的專案開發中可以用他來完成簡訊驗證碼過期的功能。

以後關於redis還會講很多其他高階的知識點,參見:

騰訊雲簡訊使用方式連線:

https://pythonav.com/wiki/detail/10/81/

文章轉自: https://pythonav.com/wiki/detail/10/82/