OCPP 1.6 协议详解:ClearCache 清除缓存指令
清除本地授权缓存的管理指令

一、指令概述
ClearCache(清除缓存)是OCPP 1.6协议中由中央系统发起的简单管理指令,用于请求充电桩清除本地授权缓存。当中央系统更新了授权信息后,可以通过此指令要求充电桩清除缓存,确保使用最新的授权信息。
1.1 指令作用
- **清除缓存**:清除充电桩的本地授权缓存
- **信息同步**:确保使用最新的授权信息
- **问题修复**:修复缓存不一致问题
- **安全清理**:清除过期或无效的授权信息
1.2 触发时机
- 中央系统批量更新了授权信息后
- 检测到授权信息不一致时
- 修复缓存问题时
- 定期清理过期缓存
- 用户撤销授权后
二、指令详解
2.1 ClearCache.req(请求)
中央系统向充电桩发送的清除缓存请求,不包含任何字段。
JSON示例:
2, "12345", "ClearCache", {}
2.2 ClearCache.conf(响应)
充电桩对清除缓存请求的响应,包含以下字段:
status - 清除状态:
JSON示例(成功):
3, "12345", { "status": "Accepted" }
JSON示例(失败):
3, "12345", { "status": "Rejected" }
三、工作流程
3.1 清除缓存流程
中央系统需要清除授权缓存
↓
发送 ClearCache.req(无字段)
↓
充电桩处理请求
↓
清除本地授权缓存
↓
所有缓存条目被删除
↓
返回 ClearCache.conf
-
成功:status = Accepted
-
失败:status = Rejected
↓
中央系统处理响应
3.2 授权更新后清除流程
中央系统批量更新授权信息
↓
更新发送到多个充电桩
↓
对每个充电桩发送 ClearCache.req
↓
充电桩清除本地缓存
↓
返回 Accepted
↓
下次授权将从中央系统重新验证
↓
使用最新的授权信息
↓
完成同步
3.3 时序图

四、重要注意事项
4.1 缓存范围
ClearCache只清除授权缓存(Authorization Cache):
- 不清除本地授权列表(Local Authorization List)
- 本地授权列表通过SendLocalList指令管理
- 只清除缓存,不影响本地列表
授权缓存和本地授权列表的区别:
4.2 清除策略
推荐清除策略:
- **立即清除**:收到请求后立即清除所有缓存条目
- **原子操作**:清除过程是原子的
- **清空所有**:清除所有缓存条目,不选择性清除
- **内存释放**:释放缓存占用的内存
为什么不支持选择性清除:
- 协议设计就是清除整个缓存
- 简化实现
- 选择性清除会增加复杂度
- 如果需要更新特定条目,SendLocalList更合适
4.3 禁用缓存时的处理
如果授权缓存被禁用(AuthorizationCacheEnabled = false):
- ClearCache请求仍然应该返回Accepted
- 因为缓存本来就是空的
- 清除操作"成功"完成
- 不需要返回Rejected
4.4 与SendLocalList的关系
ClearCache vs SendLocalList:
使用场景:
- ClearCache:中央系统批量更新后,清除缓存
- SendLocalList:同步本地授权列表
4.5 持久化
缓存应该存储在非易失性存储器中:
- 清除后,持久化存储也应该清除
- 重启后缓存仍然是空的
- 确保清除效果持久化
五、实际应用场景
5.1 场景一:批量更新授权后清除
需求:中央系统批量更新了100个用户的授权状态
流程:
-
中央系统在数据库中批量更新授权状态
-
对每个在线充电桩
-
发送ClearCache.req
-
充电桩清除本地授权缓存
-
返回Accepted
-
下次用户刷卡,重新从中央系统验证
-
使用最新的授权状态
-
完成同步
5.2 场景二:修复授权不一致
需求:用户授权状态已在中央系统更改,但充电桩仍然使用缓存的旧状态
流程:
-
用户报告授权被拒绝,但应该已授权
-
中央系统检查发现:
-
中央系统状态:已授权
-
充电桩缓存:未授权
-
发送ClearCache.req
-
充电桩清除缓存
-
用户重新刷卡
-
重新从中央系统验证
-
获得最新状态:已授权
-
问题修复
5.3 场景三:用户撤销授权
需求:用户取消会员,需要立即撤销授权
流程:
-
用户申请取消会员
-
中央系统更改用户状态为:Blocked
-
对所有在线充电桩发送ClearCache.req
-
所有充电桩清除缓存
-
用户下次刷卡
-
重新验证,获得Blocked状态
-
授权被拒绝
-
撤销生效
5.4 场景四:定期清理过期缓存
需求:定期清理过期缓存,释放空间
流程:
-
每周定时执行维护
-
对所有在线充电桩发送ClearCache.req
-
充电桩清除所有缓存条目
-
释放存储空间
-
过期和很少使用的授权被清除
-
缓存重新开始积累
-
维护完成
5.5 场景五:缓存禁用时清除
需求:授权缓存已禁用,收到ClearCache请求
流程:
-
中央系统发送ClearCache.req
-
充电桩检查:AuthorizationCacheEnabled = false
-
缓存本来就是空的
-
返回status = Accepted
-
清除操作完成
六、最佳实践
6.1 使用时机
- **批量更新后**:批量更新授权后清除缓存
- **不一致修复**:检测到不一致时修复
- **撤销授权**:用户撤销授权后立即清除
- **定期维护**:定期清理过期缓存
- **不要频繁**:不要频繁清除,影响性能
6.2 实现建议
- **原子清除**:清除操作是原子的
- **持久化清除**:清除持久化存储中的缓存
- **空缓存处理**:缓存已空或禁用也返回Accepted
- **日志记录**:记录清除操作
6.3 性能考虑
- **快速清除**:清除操作应该快速完成
- **内存释放**:释放缓存占用的内存
- **不阻塞**:清除不影响正在进行的交易
- **后台清除**:如果清除量大,可以后台处理
6.4 安全考虑
- **访问控制**:只有授权用户可以清除缓存
- **审计日志**:记录所有清除操作
- **防止滥用**:限制清除频率
- **业务影响**:清除缓存不会影响正在进行的交易
七、常见问题
Q1: ClearCache会清除本地授权列表吗?
A:
- 不会,ClearCache只清除授权缓存(Authorization Cache)
- 本地授权列表(Local Authorization List)通过SendLocalList管理
- 两者是不同的概念
Q2: 授权缓存被禁用时应该返回什么?
A:
- 应该返回Accepted
- 因为缓存本来就是空的,清除操作成功完成
- 不需要返回Rejected
Q3: 清除缓存会影响正在进行的交易吗?
A:
- 不会,清除缓存只影响未来的授权
- 正在进行的交易不受影响
- 缓存只用于新的授权验证
Q4: 为什么要清除缓存?
A:
- 确保使用最新的授权信息
- 修复缓存不一致问题
- 清除过期和无效的授权
- 释放存储空间
Q5: 清除缓存后用户需要重新验证吗?
A:
- 是的,下次授权需要重新从中央系统验证
- 因为缓存已经清空
- 这样可以确保使用最新的授权信息
八、总结
ClearCache是OCPP 1.6协议中一个简单但重要的管理指令,用于清除本地授权缓存,确保授权信息同步。正确实现ClearCache指令需要注意:
- **范围正确**:只清除授权缓存,不影响本地授权列表
- **完整清除**:清除所有缓存条目,包括持久化存储
- **正确响应**:缓存禁用或空也返回Accepted
- **不影响交易**:清除不影响正在进行的交易
- **原子操作**:清除操作是原子的
通过合理使用ClearCache,可以确保授权信息的一致性,修复缓存问题,保证系统安全运行。
相关阅读:
- OCPP1.6协议字段解析 - ChangeAvailability 平台控制充电桩或指定枪口的可用状态-CSDN博客
- OCPP 1.6 协议详解:BootNotification 启动通知指令-CSDN博客
- 深度解析 OCPP 协议 Uplink 命令处理器:OcppUplinkCmdExe 继承类设计与实践-CSDN博客
参考文档:
END
如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟