锁与事务

作者: 昙花未现 | 来源:发表于2018-09-15 22:18 被阅读7次

最近在写一个短链服务,提供两个API给用户使用,一个API用于生成短链,一个API用于根据短链获取长链接。

生成短链的实现原理是把数据库表的递增ID根据规则转换为4到7个字母数字组合。该组合作为长链接的key,利用数据库的主键保证了长链接和key的唯一性。

数据库主键id是十进制的数字。字母数字的组合加上大小写字母一共有62位,所以转换规则就是把10进制的ID转换为62进制。具体做法就是循环对62进行取余,每次取余之后都除以62直到等于零。100万的十进制数会对应4个字母数字组合,1亿的十进制数对应5个,100亿对应6个,1万亿对应7个,足够使用了。

具体生成短链的过程时用户过来一个请求时,先把保存一条记录到数据库中,然后获取该记录的ID,进行转换,获取字母数字组合,再保存到数据库中。

在测试的时候发现这样的做法只能支持每秒3个用户同时进行访问,用户多时就会由于在数据库中给短链设置了唯一索引而报错,因为同时保存了空值到数据库中。

之后考虑添加事务进行解决,在插入记录会出现MySQL error “Deadlock found when trying to get lock; try restartingtransactionn,性能几乎没有提升。

最后加入ReentrantLock锁,在保存数据库之前加锁,更新数据库成功之后进行解锁,性能得到了提升,本机测试每秒200个用户同时访问没有出现失败的情况。

参考衔接

https://javadoop.com/post/url-shortener

相关文章

  • mysql锁

    共享锁与排他锁 共享锁(读锁):其他事务可以读,但不能写。 排他锁(写锁) :其他事务不能读取,也不能写。 粒度锁...

  • 2019-03-18文章精选

    1.深入理解 MySQL ——锁、事务与并发控制 各种锁、事务与并发,写得很详细。 2.剖析分布式锁 redis部...

  • [转]SQL Server中的事务与锁

    转自SQL Server中的事务与锁 了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器。 锁:多用...

  • 事务与锁

    事务、锁、同步的区别; 事务是数据库中的概念,包括ACID,其中I即isolation,隔离性,锁只是用来保证事务...

  • 锁与事务

    最近在写一个短链服务,提供两个API给用户使用,一个API用于生成短链,一个API用于根据短链获取长链接。 生成短...

  • 事务与锁

    多个事务的并发会出现以下几个问题: 1)脏读:事务A读取了一条记录的值,然后基于这个值做业务逻辑,在事务A提交之前...

  • 事务与锁

    样例:

  • mysql锁(十)innodb下的悲观锁和乐观锁

    ****悲观锁与乐观锁****悲观锁,也叫悲观并发控制,当事务A对某行数据应用了锁,并且当这个事务把锁释放后,其他...

  • 高性能Mysql笔记

    一、Mysql架构与历史 1、架构图 2、锁 表锁 行级锁 3、事务 死锁 Mysql中的事务 1

  • 65 事务的隔离级别 , 脏读 可重复读

    1MYISAMI 表锁与INNOdb 行锁之间的区别 2, Spring 中事务声明与编程事务之间的区别 3,...

网友评论

    本文标题:锁与事务

    本文链接:https://www.haomeiwen.com/subject/vogtnftx.html