Redis相关

1、Redis是线程安全的吗?

Redis是单进程的,所以是线程安全的。Redis是利用队列技术将并发访问变为串行访问。

2、为什么使用Redis,它有什么好处?

(1)速度快,因为数据存放在内存中。

(2)支持多种数据类型,支持String,List,Set,Sorted set,Hash(底层相当于一个Map结构)。

(3)提供了RDB和AOF两种持久化方式。

(4)丰富的特性:可用作缓存,消息,可以按key设置过期时间,过期将会自动删除。

(5)支持事务,操作都是原子性。

      Redis的事务没有关系数据库事务提供的回滚(rollback)功能。为此开发者必须在事务执行出错后自己收拾剩下的摊子(将数据库复原回事务执行前的状态等,这里我们一般采取日志记录然后业务补偿的方式来处理,但是一般情况下,在redis做的操作不应该有这种强一致性要求的需求,我们认为这种需求为不合理的设计)。

3、RDB和AOF的区别

RDB持久化:是将在指定的时间间隔内生成的数据集备份到磁盘中。(可能丢失一段时间的数据)。

AOF持久化:记录的是服务器执行的所有写操作指令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF可以每秒同步一次(默认方式),也可以每次执行写入命令时同步一次。

4、redis常见性能问题和解决方案?

(1)Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件,特别是不要启用内存快照做持久化。

Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。对于Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度,如果重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,出现短暂服务暂停现象。

(2)如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次。

(3)为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。

5、mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

相关知识:redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis提供6种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。

allkeys-lru:从数据集(serverdb[i].dict)中挑选最近最少使用的数据淘汰。

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。

no-enviction(驱逐):禁止驱逐数据。

6、redis的多路复用技术

redis是一个单线程却性能非常好的内存数据库,主要用来作为缓存系统。redis采用网络IO多路复用技术来保证在多连接的时候,系统的高吞吐量。

为什么redis中要使用I/O多路复用这种技术呢?

首先,redis是跑在在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以I/O操作在一般情况下往往不能直接返回,这会导致某一文件的I/O阻塞导致整个进程无法对其他用户提供服务,而I/O多路复用技术就是为了解决这个问题而出现的。

redis的io模型主要基于epoll实现的,不过它也提供了select和kqueue的实现,默认采用epoll。

那么epoll到底是个什么东西呢?其实是众多i/o多路复用技术当中的一种而已,但是相比其他io多路复用技术(select,poll等等),epoll有诸多优点:

(1)epoll没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大  ,具体数目可以 cat /proc/sys/fs/file-max 察看。

(2)效率提升,Epoll最大的优点就在于它只管你“活跃”的连接,而与连接总数无关,因此在实际的网络环境中,Epoll的效率就会远远高于select和poll。

(3)Epoll使用了“共享内存”,就省略了内存拷贝。

 

 

 

以下是一些与Redis相关的常见面试题及其答案: 1. Redis是什么?它的特点是什么? 答:Redis是一种开源的内存数据存储系统,它支持键值对的存储。其特点包括高性能、持久化、支持多种数据结构、分布式和高可用性等。 2. Redis支持哪些数据结构? 答:Redis支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)和位图(Bitmap)等。 3. Redis的持久化机制有哪些? 答:Redis支持两种持久化机制:RDB(Redis Database)和AOF(Append Only File)。RDB是通过将内存中的数据快照保存到磁盘上的二进制文件,而AOF是通过将每个写操作追加到文件末尾来记录数据变化。 4. Redis的缓存淘汰策略有哪些? 答:Redis提供了多种缓存淘汰策略,包括LRU(Least Recently Used,最近最少使用)、LFU(Least Frequently Used,最不经常使用)、Random(随机替换)和TTL(Time To Live,过期时间)等。 5. Redis如何实现分布式? 答:Redis可以通过主从复制(Master-Slave Replication)和哨兵(Sentinel)来实现分布式。主从复制通过将主节点的数据复制到从节点上来实现数据的分布式存储,而哨兵则用于监控和管理Redis集群的高可用性。 6. Redis与Memcached的区别是什么? 答:Redis和Memcached都是内存数据存储系统,但两者有一些区别。Redis支持更多的数据结构,提供了更丰富的功能;Redis支持持久化,而Memcached不支持;Redis有更好的高可用性和分布式支持;Redis支持更多的编程语言客户端等。 7. 如何保证Redis的并发安全性? 答:Redis本身是单线程的,通过使用事件驱动机制和非阻塞IO来实现高并发。此外,Redis提供了事务和乐观锁等机制来保证并发安全性。 8. Redis的内存淘汰策略是如何工作的? 答:当Redis内存使用达到上限时,根据配置的内存淘汰策略,Redis会删除一些已有的键值对来释放内存空间。不同的策略会根据不同的规则选择要删除的键值对。 这些问题涵盖了Redis的基本概念、特点、数据结构、持久化、分布式和并发安全性等方面。在面试前,建议对Redis的原理和常用命令有一定的了解,并准备一些实际的应用场景以展示自己的经验和能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值