Redis的使用 ,接口緩存


一、Redis數據庫介紹

1. Redis安裝

"""
1、官網下載:安裝包或是綠色面安裝 (https://redis.io/)
2、安裝並配置環境變量
"""

2. redis VS mysql

"""
redis: 內存數據庫(讀寫快)、非關系型(操作數據方便、數據固定)
mysql: 硬盤數據庫(數據持久化)、關系型(操作數據間關系、可以不同組合)

大量訪問的臨時數據,才有redis數據庫更優
"""

3. redis VS memcache

"""
redis: 操作字符串、列表、字典、無序集合、有序集合 | 支持數據持久化(數據丟失可以找回(默認持久化,主動持久化save)、可以將數據同步給mysql) | 高並發支持
memcache: 操作字符串 | 不支持數據持久化 | 並發量小
"""

二、Redis的基本使用

1. 啟動服務

# dump.rdb文件:(我們在哪啟動的redis服務,就會在哪生成該文件,所以啟動redis服務前,應該先切換到合適的位置)
	redis緩存中的數據將會保存到該文件
    
"""
1)前台啟動服務(就是在終端啟動,這個終端關了,服務也關了)
>: redis-server
2)后台啟動服務 (就是在終端啟動,這個終端關了,服務還在運行)
>: redis-server --service-start
3)通過配置文件啟動服務
>: redis-server 配置文件的絕對路徑
>: redis-server --service-start 配置文件的絕對路徑
eg>: redis-server --service-start D:/redis/redis.conf
"""

2. 密碼管理

"""
1)提倡在配置文件中配置,采用配置文件啟動后,就需要輸入密碼才有查看數據的權限
安裝文件中的配置文件redis.windowsconf中:requirepass 密碼

2)當服務啟動后,並且連入數據庫,可以再改當前服務的密碼(該密碼只對當前服務有效;服務重啟,則密碼重置,就是普通啟動的話,密碼會重置為空,通過配置文件啟動的話,密碼會重置為配置文件中的密碼)
config set requirepass 新密碼

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

3. Redis客戶端連接服務端

  • Redis也是一個客戶端一個服務端,啟動服務端后,以客戶端連接服務端,進行數據庫操作。
"""
1)默認連接:-h默認127.0.0.1,-p默認6379,-n默認0,-a默認無
>: redis-cli

書寫連接參數時,一定要與前面的-h,-p等這些符號空一格。而mysql則不用空格
其中:-h 表示服務端IP,連接本機時就是127.0.0.1,也可以寫成localhost
	 -p 表示端口號
	 -n 表示連接哪個數據庫,默認從0到15個,共16個數據庫
	 -a 表示密碼

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

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

4. 關閉Redis服務

"""
1)當沒有連接進服務端時,執行
>: redis-cli shutdown

2)當連接進服務端后,執行
>: shutdown
"""

5. 切換數據庫

'''
Redis默認從0到15個,共16個數據庫

1)在連入數據庫后,執行
>: select 數據庫編號   (數據庫編號就是0-15,當輸入沒有的數字類型的編號時,默認連接進0數據庫,當輸入不是數字的編號時,會報錯)

'''

6. 數據持久化

"""
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完成數據持久化,不用在save后面加括號

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

三、Redis的數據類型和使用方法

  • 因為Redis是非關系型數據庫,所以Redis的使用,都是直接操作各種鍵值對
"""
數據類型:字符串、列表、哈希(字典)、無序集合、有序(排序)集合
	有序集合的應用:游戲排行榜
	
	
******************在終端中的使用方法*******************
	
字符串:
	set key value
	get key
	mset k1 v1 k2 v2 ...
	mget k1 k2 ...
	setex key exp value
	incrby key increment
	
列表:
	rpush key value1 value2 ...
	lpush key value1 value2 ...
	lrange key bindex eindex
	lindex key index
	lpop key | rpop key
	linsert key before|after old_value new_value
	
哈希:
	hset key field value
	hget key field
	hmset key field1 value1 field2 value2 ...
	hmget key field1 field2
	hkeys key
	hvals key
	hdel key field
	
集合:
	sadd key member1 member2 ...
	sdiff key1 key2 ...
	sdiffstore newkey key1 key2 ...
	sinter key1 key2 ...
	sunion key1 key2 ...
	smembers key
	spop key
	
有序集合:
	zadd key grade1 member1 grade2 member2 ...
	zincrby key grade member
	zrange key start end
	zrevrange key start end
"""

四、python中使用Redis

1. 安裝redis模塊

pip install redis

2. 在python中Redis的使用

  • 共有兩種使用方式

1. 直接使用
import redis
r = redis.Redis(host='127.0.0.1', port=6379, db=1, password=None, decode_responses=True)

2. 以連接池的方式使用,這樣就有類似線程池一樣的作用
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)

3. 使用方式:和終端中的使用方式基本一樣

r.get(key) ...

3. Django項目中利用Redis作為緩存數據庫

(1)Django項目為什么要用Redis

  • Django中雖然自帶管理緩存的cache模塊,但是,cache管理的是Django項目的緩存,當Django項目程序關閉后,該緩存也會自動銷毀,所以我們需要用Redis來當做Django的緩存數據庫。讓cache管理Redis數據庫。這樣就算是Django項目程序關閉,緩存中的數據依然存在。
  • Redis數據庫只能存儲字符串、數字和二進制類型的數據,對於其他的python中的對象,不能直接存儲。需要利用Django自帶的cache來處理,達到存儲復雜對象的目的。

(2)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,
            "PSAAWORD": "",
        }
    }
}

# 2.操作cache模塊直接操作緩存:views.py
from django.core.cache import cache  # 結合配置文件實現插拔式
# 存放token,可以直接設置過期時間
cache.set('token', 'header.payload.signature', 300)
# 取出token
token = cache.get('token')

4. 接口緩存

(1)什么是接口緩存

1. 后台接口是提供數據庫數據的,IO操作慢,可以將數據存儲在緩存中,接口數據從緩存中調
2. 一般將大量訪問(數據時效性要求不是很苛刻)的接口建立緩存
3. 接口緩存思想:數據先走緩存,有直接返回,沒有走數據庫(同步到緩存)

(2)接口緩存實例

# Django項目中網站主頁的輪播圖展示的后端業務邏輯

from rest_framework.viewsets import GenericViewSet
from rest_framework import mixins
from django.conf import settings
from utils.response import APIResponse
from . import models, serializers
from rest_framework.response import Response
from django.core.cache import cache
class BannerListViewSet(mixins.ListModelMixin, GenericViewSet):
    queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by('-orders').all()[:settings.BANNER_COUNT]
    serializer_class = serializers.BannerModelSerializer

    # 自定義響應結果的格式
    # def list(self, request, *args, **kwargs):
    #     response = super().list(request, *args, **kwargs)
    #     return APIResponse(results=response.data)

    # 接口緩存
    def list(self, request, *args, **kwargs):
        data = cache.get('banner_cache')

        if not data:
            print('走了數據庫')
            response = super().list(request, *args, **kwargs)
            cache.set('banner_cache', response.data)  # 不設置過期時間,緩存的更新在后台異步更新(celery異步框架)
            return response

        return Response(data)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM