redis數據庫與接口緩存

redis數據庫與接口緩存

一、接口緩存

一、什麼是接口緩存

後臺接口緩存:前臺訪問後臺的接口,後臺會優先從緩存 (內存)中查找接口數據,若是有數據,直接對前臺響應緩存數據,若是沒有數據纔會與數據庫(mysql)交互,獲得數據對前臺響應,同時將數據進行緩存以備下次使用python

前臺緩存:前臺在請求到接口數據後,在前臺創建緩存,再發送一樣的請求時,會先在前臺緩存中查找,若是有數據就不會再對後臺進行請求了mysql

二、什麼樣的接口會進行緩存

1. 接口會被大量訪問,好比主頁中的接口,幾乎全部人都會訪問,會重複訪問redis

2. 在必定時間內數據不會變化的接口sql

3. 接口的時效性不是很強時,即便數據庫數據發生變化了,同步給前臺也沒事的數據數據庫

二、redis安裝

一、官網下載:安裝包或是綠色面安裝django

二、安裝並配置環境變量windows

一、redis VS mysql

redis: 內存數據庫(讀寫快)、非關係型(操做數據方便、數據固定)緩存

mysql: 硬盤數據庫(數據持久化)、關係型(操做數據間關係、能夠不一樣組合)安全

大量訪問的臨時數據,纔有redis數據庫更優服務器

二、redis VS memcache

redis: 操做字符串、列表、字典、無序集合、有序集合 | 支持數據持久化(數據丟失能夠找回(默認持久化,主動持久化save)、能夠將數據同步給mysql) | 高併發支持

memcache: 操做字符串 | 不支持數據持久化 | 併發量小

三、Redis操做

啓動服務

"""
前提:前往一個方便管理redis持久化文件的邏輯再啓動服務:dump.rdb
1)前臺啓動服務
>: redis-server

2)後臺啓動服務
>: redis-server --service-start
注)Linux系統後臺啓動(或是修改配置文件,建議採用方式)
>: redis-server &

3)配置文件啓動前臺服務
>: redis-server 配置文件的絕對路徑

4)配置文件啓動後臺服務
注)windows系統默認按Redis安裝包下的redis.windows-service.conf配置文件啓動
>: redis-server --service-start
注)Linux系統能夠徹底自定義配置文件(redis.conf)後臺啓動
>: redis-server 配置文件的絕對路徑 &
"""


"""
windows系統
1)前臺啓動
    i)打開終端切換到redis安裝目錄
    >: cd C:\Apps\Redis
    
    ii)啓動服務
    >: redis-server redis.windows.conf

2)後臺啓動
    i)打開終端切換到redis安裝目錄
    >: cd C:\Apps\Redis
    
    ii)啓動服務(後面的配置文件能夠省略)
    >: redis-server --service-start redis.windows-service.conf
"""

密碼管理

"""
1)提倡在配置文件中配置,採用配置文件啓動
requirepass 密碼

2)當服務啓動後,而且連入數據庫(redis數據庫不能輕易重啓),能夠再改當前服務的密碼(服務重啓,密碼重置)
config set requirepass 新密碼

3)已連入數據庫,能夠查看當前數據庫服務密碼
config get requirepass
"""

鏈接數據庫

"""
1)默認鏈接:-h默認127.0.0.1,-p默認6379,-n默認0,-a默認無
>: redis-cli

2)完整鏈接:
>: redis-cli -h ip地址 -p 端口號 -n 數據庫編號 -a 密碼

3)先鏈接,後輸入密碼
>: redis-cli -h ip地址 -p 端口號 -n 數據庫編號
>: auth 密碼
"""

切換數據庫

在連入數據庫後執行
>: select 數據庫編號

關閉服務器

"""
1)先鏈接數據庫,再關閉redis服務
>: redis-cli -h ip地址 -p 端口號 -n 數據庫編號 -a 密碼
>: shutdown

2)直接鏈接數據庫並關閉redis服務
>: redis-cli -h ip地址 -p 端口號 -n 數據庫編號 -a 密碼 shutdown
"""

清空redis全部數據庫

鏈接數據庫執行
>: flushall

數據持久化

一、Redis實現數據持久化的兩種實現方式:

RDB:指定的時間間隔內保存數據快照(默認的方式)

AOF:AOF持久化方式記錄每次對服務器寫的操做,當服務器重啓的時候會從新執行這些命令來恢復原始的數據,AOF命令以redis協議追加保存每次寫的操做到文件末尾,redis還能對AOF文件進行後臺重寫,使得AOF文件的體積過大。

二、RDB與AOF優缺點

RDB:

  優勢:保存數據快照,文件小,恢復快

  缺點:沒法保存最近一次快照以前的數據,數據可能會丟失

AOF:

  優勢:保存的數據全

  缺點:AOF模式要把每一步redis命令都記錄下來,因此就致使文件的體積會很大,恢復慢

"""
1)配置文件默認配置
save 900 1  # 超過900秒有1個鍵值對操做,會自動調用save完成數據持久化
save 300 10  # 超過300秒有10個鍵值對操做,會自動調用save完成數據持久化
save 60 10000  # 超過60秒有10000個鍵值對操做,會自動調用save完成數據持久化

2)安全機制
# 當redis服務不可控宕機,會默認調用一下save完成數據持久化(若是數據量過大,也可能存在部分數據丟失)

3)主動持久化
>: save  # 連入數據庫時,主動調用save完成數據持久化

注:數據持久化默認保存文件 dump.rdb,保存路徑默認爲啓動redis服務的當前路徑
"""

redis相關配置

"""
1)綁定的ip地址,多個ip用空格隔開
bind 127.0.0.1

2)端口,默認6379,通常不作修改
port 6379

3)是否以守護進程啓動,默認爲no,通常改成yes表明後臺啓動(windows系統不支持)
daemonize no

4)定義日誌級別,默認值爲notice,有以下4種取值:
    debug(記錄大量日誌信息,適用於開發、測試階段)
    verbose(較多日誌信息)
    notice(適量日誌信息,使用於生產環境)
    warning(僅有部分重要、關鍵信息纔會被記錄)
loglevel notice

5)配置日誌文件保持地址,默認打印在命令行終端的窗口上
    若是填寫 "./redis.log" 就會在啓動redis服務的終端所在目錄下,用redis.log記錄redis日誌
logfile ""

eg)終端首先切換到log文件夾所在目錄(通常就能夠採用redis的安裝目錄,也能夠自定義),再啓動reids服務
logfile "./log/redis.log"

6)數據庫個數,默認是16個,沒特殊狀況,不建議修改
databases 16

7)數據持久化
save 900 1  # 超過900秒有1個鍵值對操做,會自動調用save完成數據持久化
save 300 10  # 超過300秒有10個鍵值對操做,會自動調用save完成數據持久化
save 60 10000  # 超過60秒有10000個鍵值對操做,會自動調用save完成數據持久化

8)數據庫持久化到硬盤失敗,redis會當即中止接收用戶數據,讓用戶知道redis持久化異常,避免數據災難發生(重啓redis便可),默認爲yes,不能作修改
stop-writes-on-bgsave-error yes

9)消耗cpu來壓縮數據進行持久化,數據量小,但會消耗cpu性能,根據實際狀況能夠作調整
rdbcompression yes

10)增持cpu 10%性能銷燬來完成持久化數據的校驗,能夠取消掉
rdbchecksum yes

11)持久化存儲的文件名稱
dbfilename dump.rdb

12)持久化存儲文件的路徑,默認是啓動服務的終端所在目錄
dir ./

13)reids數據庫密碼
requirepass 密碼
"""

四、Redis數據類型

""" 數據操做:字符串、列表、哈希(字典)、無序集合、有序(排序)集合
    有序集合:遊戲排行榜
    
字符串:
    # 設置k,v
    set key value
    # 設置k,過時時間,v
    setex key exp value
    # 經過k獲取值
    get key
    # 批量設置k,v
    mset k1 v1 k2 v2 ...
    # 批量經過k獲取值
    mget k1 k2 ...
    # 將key所儲存的值加上給定的增量值(increment) 
    incrby key increment
    
列表:
    # 往右添加值(正序)
    rpush key value1 value2 ...
    # 往左添加值(反序)
    lpush key value1 value2 ...
    # 切片取值(顧頭也顧尾)
    lrange key start end
    # 索引取值
    lindex key index
    # 從左|右踢出一個
    lpop key | rpop key
    # 在一個值前面|後面插入一個
    linsert key before|after old_value new_value
    
哈希:
    # 設置字典名 字典k 字典v
    hset key field value
    # 獲取值,字典名 字典k
    hget key field
    # 批量設置k,v
    hmset key field1 value1 field2 value2 ...
    # 批量獲取k,v
    hmget key field1 field2
    # 經過字典名取該字典下的全部的key
    hkeys key
    # 經過字典名取該字典下的全部的value
    hvals key
    # 經過字典名,key刪除鍵值對
    hdel key field
    
集合:
    # 添加集合,值
    sadd key member1 member2 ...
    # k1 - k2 差集(去除共同的保留k1)
    sdiff key1 key2 ...
    # 將差集保存到新的名字裏
    sdiffstore newkey key1 key2 ...
    # 交集
    sinter key1 key2 ...
    # 並集
    sunion key1 key2 ...
    # 查看全部的值
    smembers key
    # 隨機刪除集合中一個值
    spop key
    
有序集合:
    # 添加 集合名 值1 成員1  值2 成員2
    zadd key value1 member1 value2 member2 ...
    # 給某一個成員對應的值加值
    zincrby key value member
    # 查看後幾名
    zrange key start end
    # 查看前幾名
    zrevrange key start end
"""

五、python使用redis

下載模塊

pip3 install redis

直接使用

import redis
# decode_responses=True獲得的結果會自動解碼(不是二進制數據)
r = redis.Redis(host='127.0.0.1', port=6379, db=1, password=None, decode_responses=True)

鏈接池使用

import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=1, max_connections=100, password=None, decode_responses=True)
r = redis.Redis(connection_pool=pool)

緩存使用:要額外安裝 django-redis

# 1.將緩存存儲位置配置到redis中:settings.py
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
            "DECODE_RESPONSES": True,
            "PASSWORD": "Admin123",
        }
    }
}
# 2.操做cache模塊直接操做緩存:views.py
from django.core.cache import cache  # 結合配置文件實現插拔式
# 存放token,能夠直接設置過時時間
cache.set('token', 'header.payload.signature', 300)
# 取出token
token = cache.get('token')
相關文章
相關標籤/搜索