大家好,今天的任务是创建一个常用的编辑接口。实际上,这个接口是在大约十点半时给我的,他说要在下午上线。我在7号接口完成之后,通过代码和预言室来实现这个业务。
首先,这是一个评论编辑接口,编辑的内容是一个拼音码。拼音码是什么呢?你可以这样理解:如果你的名称是苹果,那么它的拼音码就是大写的“PG”,即苹果的第一个字母是P,第二个字母是G。这个拼音码是由后端生成的,通过你的名称去生成的。
我的任务是尽可能地编辑与品名相对应的拼音码。
这个功能已经有相应的API了,所以我只需要调用即可。这个接口实际上可以分批处理,但是我们的要求不是这样。我们在其中加入了很多技术,其中包括Redis分布式锁和多线程。虽然我不知道为什么要这样做,但是我按照领导的要求操作。
我们公司有两个项目,另一个项目已经实现了这个功能,而我现在负责的项目还没有。我的领导让我参考那个项目并复制它的代码。但是这个代码不完全相同,有很多地方需要修改。我发现原来的逻辑会发生死锁,因为他采用了一个Redis分布式锁和一个云集类。我还没有理解这个云集类是什么,但是它对我的代码有很大影响,所以我先不管它。在调试这个代码的时候,我第一次遇到了死锁。因为在执行的过程中发生了异常,所以发生了死锁。
他的代码显得有点奇怪,没有真正做到回滚或者说没有揣揣cash。我直接把那个问题住掉了,然后可以继续往下执行了。但是这引发了一个问题,即原来的逻辑是直接把那个k删掉,但是后来我们这个系统里面是把那个k设置为过期。这两种方式有什么区别呢?我还没有搞清楚。
最后,我想说,所有涉及到数据库的逻辑一定要try catch,最后在finally里面释放,否则会很难受。
谢谢大家。 接下来我会详细说明这个编辑接口的实现逻辑。首先,我们需要通过API获取品名和相应的名称。然后,我们需要将名称转换为拼音码。这里需要注意的是,我们需要将品名和名称与拼音码进行一一对应。这个过程可能会比较耗时,所以我们需要将任务分批处理。
我们使用Redis分布式锁来确保同一时间只有一个任务在运行。这个锁的实现需要注意一些问题,例如锁的粒度、锁的超时时间等等。我们还使用了多线程来提高任务的处理效率。
在实现这个编辑接口时,我们还遇到了一些问题。例如,我们发现原来的逻辑会发生死锁,所以我们不得不修改一些代码。此外,我们还发现原来的代码没有做到回滚或者说没有揣揣cash,这可能会在数据处理过程中引发一些问题。
最后,我想强调一下,所有涉及到数据库的逻辑一定要try catch,最后在finally里面释放,否则会很难受。同时,我们还需要做好日志的记录,方便出现问题时进行排查。
今天的任务是创建一个常用的编辑接口。实际上,这个接口是在大约十点半时给我的,他说要在下午上线。我在7号接口完成之后,通过代码和预言室来实现这个业务。
首先,这是一个评论编辑接口,编辑的内容是一个拼音码。拼音码是什么呢?你可以这样理解:如果你的名称是苹果,那么它的拼音码就是大写的“PG”,即苹果的第一个字母是P,第二个字母是G。这个拼音码是由后端生成的,通过你的名称去生成的。
我的任务是尽可能地编辑与品名相对应的拼音码。
这个功能已经有相应的API了,所以我只需要调用即可。这个接口实际上可以分批处理,但是我们的要求不是这样。我们在其中加入了很多技术,其中包括Redis分布式锁和多线程。虽然我不知道为什么要这样做,但是我按照领导的要求操作。
我们公司有两个项目,另一个项目已经实现了这个功能,而我现在负责的项目还没有。我的领导让我参考那个项目并复制它的代码。但是这个代码不完全相同,有很多地方需要修改。我发现原来的逻辑会发生死锁,因为他采用了一个Redis分布式锁和一个云集类。我还没有理解这个云集类是什么,但是它对我的代码有很大影响,所以我先不管它。在调试这个代码的时候,我第一次遇到了死锁。因为在执行的过程中发生了异常,所以发生了死锁。
他的代码显得有点奇怪,没有真正做到回滚或者说没有揣揣cash。我直接把那个问题住掉了,然后可以继续往下执行了。但是这引发了一个问题,即原来的逻辑是直接把那个k删掉,但是后来我们这个系统里面是把那个k设置为过期。这两种方式有什么区别呢?我还没有搞清楚。
最后,我想说,所有涉及到数据库的逻辑一定要try catch,最后在finally里面释放,否则会很难受。
谢谢大家。
接下来我会详细说明这个编辑接口的实现逻辑。首先,我们需要通过API获取品名和相应的名称。然后,我们需要将名称转换为拼音码。这里需要注意的是,我们需要将品名和名称与拼音码进行一一对应。这个过程可能会比较耗时,所以我们需要将任务分批处理。
我们使用Redis分布式锁来确保同一时间只有一个任务在运行。这个锁的实现需要注意一些问题,例如锁的粒度、锁的超时时间等等。我们还使用了多线程来提高任务的处理效率。
在实现这个编辑接口时,我们还遇到了一些问题。例如,我们发现原来的逻辑会发生死锁,所以我们不得不修改一些代码。此外,我们还发现原来的代码没有做到回滚或者说没有揣揣cash,这可能会在数据处理过程中引发一些问题。
最后,我想强调一下,所有涉及到数据库的逻辑一定要try catch,最后在finally里面释放,否则会很难受。同时,我们还需要做好日志的记录,方便出现问题时进行排查。
谢谢大家!