事务
①原子性(atomicity)
一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
②一致性(consistency)
事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
③隔离性(isolation)
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
④持久性(durability)
持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
在Redis事务没有没有隔离级别的概念!
在Redis单条命令是保证原子性的,但是事务不保证原子性!
乐观锁
①当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。
②没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。 在Redis是可以实现乐观锁的!
一、Redis如何实现事务?
①正常执行事务
②放弃事务
③编译时异常,代码有问题,或者命令有问题,所有的命令都不会被执行
⑤总结:由以上可以得出结论,Redis是支持单条命令事务的,但是事务并不能保证原子性!
二、Redis如何实现乐观锁?
①watch(监视)
②多线程测试watch
#线程1
#线程2
③总结:乐观锁和悲观锁的区别。
悲观锁: 什么时候都会出问题,所以一直监视着,没有执行当前步骤完成前,不让任何线程执行,十分浪费性能!一般不使用!
乐观锁: 只有更新数据的时候去判断一下,在此期间是否有人修改过被监视的这个数据,没有的话正常执行事务,反之执行失败!
Redis在Jedis中如何使用和操作?
①创建一个Maven项目
②导入Jedis和fastjson依赖,耐心等待下载完成
` redis.clients jedis 3.2.0
com.alibaba fastjson 1.2.62 `③连接Redis测试,此处为了方便测试,连接的是本地的Redis服务,连接远程需要更改配置文件和关闭防火墙
// 1、 new Jedis 对象即可 Jedis jedis = new Jedis("127.0.0.1",6379); // jedis 所有的命令就是我们之前的所有指令 System.out.println(jedis.ping());
返回PONG,证明连接成功。
④进行常用的API练习检验
⑤总结:在Jedis中连接使用Redis,和Redis控制台命令完全一致