美文网首页
Redis--事务,锁机制,Redis和Memcached的区别

Redis--事务,锁机制,Redis和Memcached的区别

作者: Amy1234567 | 来源:发表于2021-09-04 14:56 被阅读0次

Redis事务的定义

Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序地执行。事务在执行过程中,不会被其他客户端送来的命令请求多打断。

Redis事务的主要作用就是串联多个命令防止别的命令插队。

1. Multi、Exec、discard

从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。

组队的过程中可以通过discard来放弃组队。 

尚硅谷 my test 尚硅谷

2. 事务的错误处理

组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消。

尚硅谷 my test

如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。

my test my test

3. 悲观锁与乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁表锁等,读锁写锁等,都是在做操作之前先上锁。

尚硅谷

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。

尚硅谷

4. Redis事务的三个特性

\Rightarrow 单独的隔离操作

事务中的所有命令都会序列化,按顺序执行。事务在执行过程中,不会被其他客户端送来的命令请求所打断

\Rightarrow 没有隔离级别的概念

队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行

\Rightarrow 不保证原子性

事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

Redis和Memcached的区别

1. 类型

Redis是一个开源的内存数据结构存储系统,用作数据库,缓存和消息代理。

Memcached是一个免费的开源高性能分布式对象内存系统,它通过减少数据库负载来加速动态Web应用程序。

2. 数据结构

Redis支持字符串,散列,列表,集合,有序集,位图,超级日志和空间索引。

Memcached支持字符串和整数。

3. 执行速度

Memcached的读写速度高于Redis。

4. 复制

Memcached不支持复制。

Redis支持主从复制,允许从属Redis服务器称为主服务器的精确副本;来自任何Redis服务器的数据都可以复制到任意数量的从属服务器。

5. 密匙长度

Redis的密匙长度最大为2GB

Memcached的密匙长度最大为250字节

6. 线程

Redis是单线程的

Memcached是多线程的

另附

1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;

2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;

3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;

5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;

6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);

7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;

8、Redis支持数据的备份,即master-slave模式的数据备份;

相关文章

网友评论

      本文标题:Redis--事务,锁机制,Redis和Memcached的区别

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