1. 用户会话管理
环境设置
首先,确保你安装了必要的Python库:
pip install flask redis
示例代码
-
初始化Flask应用和Redis客户端:
from flask import Flask, session, redirect, url_for, request import redis import os app = Flask(__name__) # 配置Flask应用的密钥 app.secret_key = os.urandom(24) # 配置Redis客户端 redis_client = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True) # Redis会话存储的前缀 SESSION_PREFIX = "session:"
-
设置会话管理的辅助函数:
def save_session_to_redis(session_id, session_data): redis_client.hmset(f"{SESSION_PREFIX}{session_id}", session_data) def load_session_from_redis(session_id): return redis_client.hgetall(f"{SESSION_PREFIX}{session_id}") def delete_session_from_redis(session_id): redis_client.delete(f"{SESSION_PREFIX}{session_id}")
-
定义登录、登出和主页路由:
@app.route('/') def index(): if 'username' in session: username = session['username'] return f'Logged in as {username}' return 'You are not logged in' @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': session_id = request.form['session_id'] session['username'] = request.form['username'] session_data = {'username': session['username']} save_session_to_redis(session_id, session_data) return redirect(url_for('index')) return ''' <form method="post"> Session ID: <input type="text" name="session_id"><br> Username: <input type="text" name="username"><br> <input type="submit" value="Login"> </form> ''' @app.route('/logout') def logout(): session_id = request.args.get('session_id') session.pop('username', None) delete_session_from_redis(session_id) return redirect(url_for('index'))
-
在应用启动时加载会话数据:
@app.before_request def load_user_session(): session_id = request.args.get('session_id') if session_id: session_data = load_session_from_redis(session_id) if session_data: session.update(session_data)
运行应用
保存上述代码为一个Python文件(例如app.py),然后运行它:
python app.py
打开浏览器,访问
http://localhost:5000/
,你可以看到登录和登出的页面,并且会话数据会存储在Redis中。
2. 消息队列
环境设置
确保你安装了必要的Python库:
pip install redis
示例代码
我们将创建两个脚本:一个生产者(Producer)脚本,用于将消息放入队列;一个消费者(Consumer)脚本,用于从队列中读取并处理消息。
-
Producer脚本:
import redis # 配置Redis客户端 redis_client = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True) # 定义队列名称 QUEUE_NAME = "message_queue" def send_message(message): # 将消息放入队列 redis_client.rpush(QUEUE_NAME, message) print(f"Message sent: {message}") if __name__ == "__main__": # 示例消息 messages = ["Hello", "World", "Redis", "Queue"] for message in messages: send_message(message)
-
Consumer脚本:
import redis import time # 配置Redis客户端 redis_client = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True) # 定义队列名称 QUEUE_NAME = "message_queue" def process_message(): while True: # 从队列中获取消息 message = redis_client.blpop(QUEUE_NAME, timeout=0) if message: print(f"Message received: {message[1]}") # 模拟消息处理 time.sleep(1) if __name__ == "__main__": print("Consumer is running...") process_message()
运行示例
-
启动Consumer脚本: 打开一个终端窗口,运行消费者脚本:
python consumer.py
-
运行Producer脚本:
打开另一个终端窗口,运行生产者脚本:
python producer.py
你会看到Consumer脚本从Redis队列中读取消息并处理它们。
消息处理逻辑
-
Producer脚本使用
rpush
方法将消息放入Redis列表的右端。 -
Consumer脚本使用
blpop
方法从Redis列表的左端读取消息。blpop
是一个阻塞操作,当列表为空时会等待,直到有新的消息进入。
-
3. 实时分析和统计
环境设置
确保你安装了必要的Python库:
pip install flask redis
示例代码
我们将创建一个简单的Flask Web应用,用于统计和显示网站访问量。
-
初始化Flask应用和Redis客户端:
from flask import Flask, request, jsonify import redis import time app = Flask(__name__) # 配置Redis客户端 redis_client = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True) # 定义统计数据存储的前缀 STATS_PREFIX = "stats:" # 获取当前日期(用于统计按天存储) def get_current_date(): return time.strftime("%Y-%m-%d") # 增加访问量统计 def increment_page_views(page): current_date = get_current_date() redis_client.hincrby(f"{STATS_PREFIX}{current_date}", page, 1) # 获取某天的访问量统计 def get_page_views(date): return redis_client.hgetall(f"{STATS_PREFIX}{date}") @app.route('/') def home(): increment_page_views("home") return "Welcome to the homepage!" @app.route('/about') def about(): increment_page_views("about") return "Welcome to the about page!" @app.route('/stats') def stats(): date = request.args.get('date', get_current_date()) stats = get_page_views(date) return jsonify(stats) if __name__ == "__main__": app.run(debug=True)
运行应用
保存上述代码为一个Python文件(例如app.py),然后运行它:
python app.py
打开浏览器,访问以下URL:
- 访问主页:http://localhost:5000/
- 访问关于页:http://localhost:5000/about
- 查看统计数据:http://localhost:5000/stats
代码解释
-
increment_page_views(page)
:增加指定页面的访问量统计。使用Redis的hincrby
命令将访问量存储在哈希表中,以当前日期为键,以页面名称为字段。 -
get_page_views(date)
:获取指定日期的页面访问量统计。使用Redis的hgetall
命令读取哈希表中的所有字段和值。 -
/stats
路由:返回指定日期的访问量统计,默认为当前日期。
实时统计功能
通过上述示例,你可以实现实时的访问量统计和显示。这对于需要高效处理大量数据的应用程序来说非常有用,例如实时监控、分析和报告。
4. 分布式锁
环境设置
确保你安装了必要的Pyth