异步通信,rpc通信的笔记

加密

rpc通信,现在很多使用事件源的方式或者类似的方式。通过消息队列来传递事件,然后有消费端处理事件。 对于执行结果,则保存到另外的队列中去。这里有个问题,队列是有序的,客户端查询的结果可能不是有序的,所以,一般会通过加一个事件的guid来解决。但是一般相同的查询条件,结果应该一般是相同的(不考虑过期)。这点和插入不同,插入相同的数据,返回的主键是不同的。 所以会一部分浪费。

例如 1 客户a 插入产品1,同时客户2也插入产品1.
2 2个插入操作到事件队列中去
3 服务消费事件,执行插入产品到数据库操作。
4 服务将结果的记录id保存到结果队列
5 客户查询插入结果(根据插入时的guid)

这样的情况一般的时候是没问题。

考虑另外的情况,查询
1 客户a 查询产品1,同时客户2也查询产品1.
2 2个查询操作到事件队列中去
3 服务消费事件,执行查询。
4 服务将结果保存到结果队列
5 客户查询插入结果(根据插入时的guid)
这样就会有2个查询结果。

解决办法:
所有查询类的方法(非插入,修改,删除),同样的参数返回相同的结果,定期过时。
就是把用户请求的参数做md5,得到16位或32位密文,然后用密文做key。将结果保存到对应的redis缓存,这样同样的参数的查询,结果只有一个,减少空间,和提高性能。同时,还不受查询的顺序影响。

posted @   过错  阅读(66)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示