C# 在URL缩写器中使用双射词典
我正在创建一个新的URL缩短器,并且已经了解到需要一个双射函数。因此,我发现(非常好),并想知道如何在URL shortener应用程序中使用它。目前,我对数据库ID列进行Base36编码,以创建缩短的URL,并将完整的URL存储到表中。这很好,但我不明白为什么我需要使用双射函数?我是否将数据库中的值存储到双射字典中?我目前拥有的功能是否足够?使用双射词词典有什么好处?我不确定我是否完全理解你的问题…C# 在URL缩写器中使用双射词典,c#,url-shortener,C#,Url Shortener,我正在创建一个新的URL缩短器,并且已经了解到需要一个双射函数。因此,我发现(非常好),并想知道如何在URL shortener应用程序中使用它。目前,我对数据库ID列进行Base36编码,以创建缩短的URL,并将完整的URL存储到表中。这很好,但我不明白为什么我需要使用双射函数?我是否将数据库中的值存储到双射字典中?我目前拥有的功能是否足够?使用双射词词典有什么好处?我不确定我是否完全理解你的问题… 如果我理解正确,您已经创建了一个具有唯一ID和URL的查找表。 缩短的URL是Base36编码
如果我理解正确,您已经创建了一个具有唯一ID和URL的查找表。 缩短的URL是Base36编码的ID 让我们看看用例:
- 创建一个缩短的URL
意味着在实现中检查表中是否已经有该URL(很简单,只需返回Base36编码的ID即可)。
否则,只需创建一个新条目并返回新ID的Base36编码 - 查找完整的URL
将Base36值解码为一个ID,在表中查找该ID并返回完整的URL(如果找到)
您提到的Jon的
BiDictionary
将是内存缓存(建议写通)的良好基础,因此您可以尽可能避免DB往返。Bidictionary
使用Dictionary
而对于可由多个线程访问的缓存,我强烈建议使用ConcurrentDictionary
。在您的情况下,不需要Jon实现中的列表
部分,因为您总是有1:1的对应关系。为了更快地查找,您可以使用Base36编码值作为键…您在哪里读到需要双射函数?谢谢-我读了很多关于双射函数的书,认为我遗漏了一些东西。这正是我需要的澄清。