数据库与Redis学习总结

一、数据库的事务

数据库事物有四个特性,①原子性:所有操作要么全部成功,要么全部失败②一致性:事物执行前和执行后都需要保证一致性,也就是从一个一致性状态变到另一个一致性状态,比如A和B之间无论如何转账,总数应该保持一致。③隔离性:一个事务不能被另一个事务干扰。④持久性:一旦事务提交了,那么对数据库中的数据的改变就是永久的。

以上是数据库事务的四大特性;

二、如果不考虑数据库事务的隔离性,会引发的问题

①更新丢失:两个事务同时更新,第二个事务回滚覆盖第一个事务更新的数据

②脏读:读取了另一个未提交事务的数据

③不可重复读:在一个事务范围内,两次查询的结果不一致,和脏读的区别是不可重复读是读取了前一事务提交的数据

④虚读(幻读):修改的数据被其他事务修改回去了并提交,导致后面再次查询的时候发现没有被修改。

三、由此一来Mysql提供的数据库隔离级别

   ①串行化:隔离级别最高以上四种情况都能避免

   ②可重复读:可避免以上①②③种问题

   ③读提交:可避免以上①②问题

   ④读未提交:可避免以上①问题

那么数据库的隔离级别该怎么设置:在数据库的连接建立是设置conn.setTransactionIsolation(Connection.Transaction_Serializable);并且设置事务开启conn.setAutoCommit(false);

四、mysql存储引擎

①、myisam , inodb , memory , merge四种存储引擎,其中myisam不支持事务也不支持外键,只有memory支持Hash索引

 五、Mysql索引

   ①mysql的索引主要有两种结构B+tree和hash索引,支持hash索引的只有memory存储引擎,也是该存储引擎的默认索引结构。hash索引结构因为是hash散列结构所以当查找某一条数据的时候,速度很快,但是因为hash一个建只对应一个值,所以不支持排序和范围查找

   ②B+tree索引结构是inodb,Myisam存储引擎的索引结构,支持范围查找和排序,但是单条查询没有hash快

   ③mysql常见的索引类型有:主键索引(索引值必须唯一且不能为空),唯一索引(索引值必须唯一),普通索引(无限制),全文索引(仅可用于myisam表),组合索引

 

六、数据库锁有哪些

    共享锁,排他锁,更新锁,具体什么时候加锁加什么锁由数据库自行决定,和设置的数据库事务隔离级别有关系

 

七、一致性hash

    一致性hash是将集群中的设备节点和数据映射到一个封闭的环形中,数据通过顺时针空间存放到设备节点。这样的好处是当有一个设备out后,只需将数据考到下一个设备中,如果新增一个设备也只需将拷贝少量的数据到新的设备中。出现问题后,丢失或者不可用的数据尽量做到了最小化

八、Redis为什么的集群模式

     Redis通过hash槽而非一致性hash来实现集群模式,

九、怎么通过Redis来实现分布式锁

     Redis实现分布式锁的正确方法应该是,通过set设置一个SN值并指定过期时间,避免发生错误没有释放锁时发生死锁,解锁的时候可以通过String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";

        Object result = jedis.eval(script, Collections.singletonList(lockKey),
 Collections.singletonList(requestId));

 

这样就可以实现一个分布式锁的加锁和解锁。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值