Redis | 青训营笔记

78 阅读2分钟

事务

①原子性(atomicity)

一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。

②一致性(consistency)

事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

③隔离性(isolation)

一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

④持久性(durability)

持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

在Redis事务没有没有隔离级别的概念!

在Redis单条命令是保证原子性的,但是事务不保证原子性!

乐观锁

①当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。

②没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。 在Redis是可以实现乐观锁的!

一、Redis如何实现事务?

①正常执行事务

image.png

②放弃事务

image.png

③编译时异常,代码有问题,或者命令有问题,所有的命令都不会被执行

image.png

⑤总结:由以上可以得出结论,Redis是支持单条命令事务的,但是事务并不能保证原子性!

二、Redis如何实现乐观锁?

①watch(监视)

image.png

②多线程测试watch
#线程1 image.png

#线程2

image.png

③总结:乐观锁和悲观锁的区别。
悲观锁:  什么时候都会出问题,所以一直监视着,没有执行当前步骤完成前,不让任何线程执行,十分浪费性能!一般不使用!
乐观锁:  只有更新数据的时候去判断一下,在此期间是否有人修改过被监视的这个数据,没有的话正常执行事务,反之执行失败!

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控制台命令完全一致