
正文
redis不会回滚的情况,redis bug
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
redis不支持以下哪种特性
面试官:比如说redis的事务是不支持原子性和持久性的,包括他们的实现原理等方面也是有很大区别的。我:学到了。。正文 事务的四大特性 ACID,指数据库事务正确执行的四个基本要素的缩写。
Redis 提供了简单的事务,之所以说它简单,主要是因为它不支持事务中的回滚特性,同时无法实现命令之间的逻辑关系计算,当然也体现了 Redis 的 “keep it simple” 的特性。
不支持redis是不支持缓存,分布式锁、消息队列。在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。
redis数据库支持数据类型不包含Long。String是最常用的一种数据类型,String类型的值可以是字符串、数字或者二进制,但值最大不能超过512MBHash是一个键值对集合Set是无序去重的集合。Set提供了交集、并集等方法。
数据类型支持不同 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。
相关问答
Q1: redis基本操作命令
连接操作相关命令:quit:关闭连接(connection)。auth:简单密码认证。value操作命令:exists(key):确认key否存。del(key):删除key。type(key):返值类型。
首先为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中。
在 Redis 中查看数据可以使用以下命令:keys pattern 命令可以列出匹配给定模式的所有键名。例如,执行 keys * 可以列出所有的键名。type key 命令可以查看指定键的数据类型。
整个redis的server端命令执行过程就如下面这个流程图:nread = read(fd, c-querybuf+qblen, readlen);负责读取命令数,通过processInputBuffer进行下一步处理。
接下来先看一下对string类型进行基本存储和获取的命令。如果我们存储的string中的内容是数字的话,我们也可以对其进行增或减操作,Redis可以自动的对字符串进行相关的操作。
Q2: Redis为什么会那么快?
Redis快的主要原因是:完全基于内存数据结构简单,对数据操作也简单使用多路 I/O 复用模型第二点不细讲,主要围绕第三点采用多路 I/O 复用技术来展开。
Redis的高并发和快速原因redis是基于内存的,内存的读写速度非常快;redis是单线程的,省去了很多上下文切换线程的时间;redis使用多路复用技术,可以处理并发的连接。
现在我们都用高级语言来编程,比如Java、python等。也许你会觉得C语言很古老,但是它真的很有用,毕竟unix系统就是用C实现的,所以C语言是非常贴近操作系统的语言。Redis就是用C语言开发的,所以执行会比较快。
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,所以 Redis 是单线程的。
Redis库查询速度比PG库快。 原因是Redis是基于内存的数据库,而PG库是基于磁盘的数据库。内存的访问速度远远快于磁盘,因此Redis的查询速度比PG库更快。 此外,对于一些需要高并发的场景,Redis也比PG库更适用。
Q3: 为何Redis用乐观锁,而MySQL数据库却没有
但是,Redis本来就是一个KV类型的缓存引擎,要处理的是大量读少量写的场景,对一致性也没有要求。MySQL就完全不一样了,作为一个典型的关系型数据库,它需要完整地实现ACID,所以Redis的方式是解决不了它的问题的。
如果使用数据库的话,很可能在这一瞬间造成数据库的崩溃,所以通常会使用Redis(秒杀的场景会比较复杂,Redis只是其中之一,例如如果请求超过某个数量的时候,多余的请求就会被限流)。
第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
在数据库方面,mysql是关系型数据库主要用于存放持久化数据,redis是NOSQL,即非关系型数据库,也是缓存数据库,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
类型不同 MySQL是关系型数据库;而Redis是非关系型数据库。作用不同 mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。
Q4: 一起讨论下,消息幂等(去重)通用解决方案
1、如果要保证一致性,需要生产者在失败后重试,不过重试又会导致消息重复的问题,一个解决方案是每个消息给一个唯一的id,通过服务端的主动去重来避免重复消息的问题,不过这一机制目前Kafka还未实现。
2、Kafka本身支持At least once消息送达语义,因此实现消息发送的幂等关键是要实现Broker端消息的去重。
3、查询 查询的API,可以说是天然的幂等性,因为你查询一次和查询两次,对于系统来讲,没有任何数据的变更,所以,查询一次和查询多次一样的。
4、服务器处理消息需要是幂等的,消息的生产方和接收方都需要做到幂等性; 发送放需要添加一个定时器来遍历重推未处理的消息,避免消息丢失,造成的事务执行断裂。
Q5: redis事务失败怎么处理
如果某个命令执行失败,可以通过修改 AOF 文件中的内容来回滚之前的操作。定期备份 Redis 数据库:如果您发现 Redis 数据库中的数据发生了错误,可以使用备份的数据进行恢复。
min-slaves-max-lag 多少秒。客户端需要怎么做: 对于 client 来讲,就需要做些处理,比如先将数据缓存到内存当中,然后过一段时间处理,或者连接失败,接收到错误切换新的 master 处理。
在redis中,悲观锁指的是对数据key和都value都上锁,只要这个数据有一点小改动,事务将失败。
Redis 执行 multi 命令标志事务开始。当客户端切换至事务状态后,服务端会将除了 exec、discard(取消事务,放弃执行事务块内的所有命令)、watch 和 multi 以外的命令放进一个先进先出的事务队列中。
redis不会回滚的情况的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于redis bug、redis不会回滚的情况的信息别忘了在本站进行查找喔。







