redis + 拦截器 :防止数据重复提交
在使用Redis进行数据重复提交拦截时,可以通过设置一个与提交操作相关联的唯一标识(如用户ID、会话ID、表单Token等)作为Redis的key,并设置一个合理的过期时间来控制。如果key已经存在于Redis中,则表示该操作已经执行过,可以阻止重复提交。
以下是一个简单的Python示例,使用redis-py
库和拦截器来实现数据的重复提交拦截:
import redis
# 初始化Redis客户端
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
def repeat_submit_interceptor(unique_key, expire_time=3600):
"""
重复提交拦截器
:param unique_key: 用于标识操作的唯一键
:param expire_time: key的过期时间,防止无限期占用内存
:return: True 允许提交, False 拒绝提交
"""
if redis_client.exists(unique_key):
# 如果key已经存在,表示操作已执行
return False
else:
# 如果key不存在,设置key,表示操作执行中
redis_client.set(unique_key, "1", ex=expire_time)
return True
# 假设用户ID为唯一标识
user_id = "user123"
# 进行提交前检查
if repeat_submit_interceptor(user_id):
# 允许提交操作
print("Operation allowed. Proceed with submission.")
else:
# 拒绝重复提交
print("Operation rejected. Submission already made.")
在实际应用中,你需要根据你的应用逻辑来设计唯一键的生成方式,并确保它能够在不同的上下文中区分开不同的操作。
评论已关闭