天天看點

技術幹貨|Redis的常見功能及在python開發中的應用

作者:運維開發木子李

#頭條創作挑戰賽#

技術幹貨|Redis的常見功能及在python開發中的應用

緩存資料:

将資料存儲在Redis中,以避免頻繁地通路資料庫。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 設定緩存資料
r.set('key', 'value')

# 擷取緩存資料
value = r.get('key')
print(value)           

計數器:

使用Redis的原子操作實作計數器功能。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 增加計數器
r.incr('counter')

# 擷取計數器值
counter = r.get('counter')
print(counter)           

消息隊列:

使用Redis的清單資料結構實作簡單的消息隊列。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 将消息加入隊列
r.lpush('queue', 'message1')
r.lpush('queue', 'message2')
r.lpush('queue', 'message3')

# 擷取隊列中的消息
message = r.rpop('queue')
print(message)           

釋出訂閱:

使用Redis的釋出訂閱功能實作消息的廣播和訂閱。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 釋出消息
r.publish('channel', 'message')

# 訂閱消息
pubsub = r.pubsub()
pubsub.subscribe('channel')
for message in pubsub.listen():
    print(message)           

分布式鎖:

使用Redis的SETNX指令實作分布式鎖。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 擷取鎖
lock_acquired = r.setnx('lock', '1')
if lock_acquired:
    # 執行臨界區代碼
    print('Lock acquired')

# 釋放鎖
r.delete('lock')           

限制請求頻率:

使用Redis的有序集合和過期時間實作請求限制。

import redis
import time

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 設定請求限制
r.zadd('requests', {time.time(): 'request1'})
r.zadd('requests', {time.time(): 'request2'})

# 擷取最近一分鐘的請求數量
current_time = time.time()
one_minute_ago = current_time - 60
requests_count = r.zcount('requests', one_minute_ago, current_time)
print(requests_count)

# 清理過期的請求記錄
r.zremrangebyscore('requests', 0, one_minute_ago)           

排行榜:

使用Redis的有序集合實作排行榜功能。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 設定使用者積分
r.zadd('leaderboard', {'user1': 100, 'user2': 200, 'user3': 300})

# 擷取排行榜前三名使用者
leaderboard = r.zrevrange('leaderboard', 0, 2, withscores=True)
print(leaderboard)           

地理位置查詢:

使用Redis的地理位置資料結構實作位置查詢功能。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 設定地理位置
r.geoadd('locations', 13.361389, 38.115556, 'Palermo')
r.geoadd('locations', 15.087269, 37.502669, 'Catania')

# 查詢附近的位置
nearby_locations = r.georadius('locations', 15, 37, 200, unit='km')
print(nearby_locations)           

分布式緩存:

使用Redis的叢集功能實作分布式緩存。

from rediscluster import RedisCluster

# 連接配接到Redis叢集
startup_nodes = [{'host': 'localhost', 'port': '7000'}, {'host': 'localhost', 'port': '7001'}]
r = RedisCluster(startup_nodes=startup_nodes, decode_responses=True)

# 設定緩存資料
r.set('key', 'value')

# 擷取緩存資料
value = r.get('key')
print(value)           

會話管理:

使用Redis的哈希資料結構存儲會話資料。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 設定會話資料
r.hset('session1', 'username', 'user1')
r.hset('session1', 'email', '[email protected]')

# 擷取會話資料
username = r.hget('session1', 'username')
email = r.hget('session1', 'email')
print(username, email)           

分布式計算:

使用Redis的Lua腳本功能實作分布式計算任務。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 定義Lua腳本
lua_script = """
local result = {}
for i = 1, ARGV[1] do
    result[i] = tonumber(ARGV[i + 1]) * tonumber(ARGV[i + ARGV[1] + 1])
end
return result
"""

# 執行Lua腳本
result = r.eval(lua_script, 0, 2, 10, 20)
print(result)           

資料持久化:

使用Redis的RDB和AOF持久化功能将資料儲存到磁盤。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 開啟RDB持久化
r.config_set('save', '3600 1')

# 開啟AOF持久化
r.config_set('appendonly', 'yes')           

分布式鎖的自動續期:

使用Redis的SET指令結合Lua腳本實作分布式鎖的自動續期。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 擷取鎖
lock_acquired = r.set('lock', '1', ex=10, nx=True)
if lock_acquired:
    # 啟動自動續期
    lua_script = """
    if redis.call('get', KEYS[1]) == ARGV[1] then
        return redis.call('expire', KEYS[1], ARGV[2])
    else
        return 0
    end
    """
    r.eval(lua_script, 1, 'lock', '1', 10)           

清單操作:

使用Redis的清單資料結構實作清單操作(如推入元素、彈出元素)。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 推入元素
r.lpush('list', 'element1')
r.lpush('list', 'element2')

# 彈出元素
element = r.rpop('list')
print(element)           

單點登入:

使用Redis的字元串資料結構和過期時間實作單點登入功能。

import redis

# 連接配接到Redis伺服器
r = redis.Redis(host='localhost', port=6379, db=0)

# 設定登入狀态
r.setex('session1', 3600, 'user1')

# 擷取登入狀态
session = r.get('session1')
print(session)