赞
踩
答:Redis是一个使用C语言编写的开源、高性能、支持多种数据结构的NoSQL数据库。
答:Redis支持五种数据类型:字符串(string)类型、哈希(hash)类型、列表(list)类型、集合(set)类型和有序集合(sorted set或zset)类型。
答:Redis主从复制是通过在从服务器上启动一个Redis进程,连接到主服务器并发送SYNC命令来实现的。
主服务器创建一个快照文件并将其发送到从服务器。然后,主服务器将其所有写操作复制到从服务器。在复制过程中,从服务器连接到主服务器并接收命令,以保证数据不会丢失。
答:Redis有两种持久化方式:快照
和日志文件
。快照是把当前内存中的数据作为一个副本保存到硬盘中的一个文件中。日志文件则是将写操作写入一个日志文件中,当Redis重启时,会从日志文件中读取并重新构建数据。
答:Redis使用单线程模型,每个客户端请求按顺序处理,保证了并发的安全性。此外,Redis采用了异步I/O和非阻塞I/O技术来提高性能。
答:Redis的缓存淘汰策略有四种:
答:Redis使用MULTI
、EXEC
和WATCH
命令实现事务。 MULTI
命令将客户端的请求推到一个队列中,EXEC
命令执行队列中的所有命令。WATCH
命令可以监听一个或多个键的变化,如果在队列中执行事务期间有被监听的键被其他客户端修改,则事务会被取消。
root@1b9968da8463:/data# redis-cli 127.0.0.1:6379> set name 'Peter' OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> set id '001' QUEUED 127.0.0.1:6379> get id QUEUED 127.0.0.1:6379> set depName 'Dev' QUEUED 127.0.0.1:6379> set age 25 QUEUED 127.0.0.1:6379> exec 1) OK 2) "001" 3) OK 4) OK 127.0.0.1:6379> get age "25"
答:Redis哨兵是一个独立的进程,可以监测Redis服务器的健康状态并在主服务器宕机时自动将从服务器升级为主服务器。
答:Redis常见的使用场景包括缓存、消息队列、计数器、排行榜、分布式锁等。
答:Redis通过SETNX
命令来实现分布式锁,在获取锁之前需要先判断当前锁是否已经被其他客户端占用,如果没有被占用则获取锁,否则等待一定时间后重试。
答:Redis 使用惰性删除和定期删除两种策略处理过期键:
惰性删除:当客户端尝试访问一个已经过期的键时,Redis 会立即删除该键并返回空值。这种方式确保在访问时进行删除,但可能会造成一些键在过期后仍然存在一段时间。
定期删除:Redis 每隔一段时间(默认是 1 秒)会对一部分过期键进行检查和删除。这种方式通过遍历一部分过期键,将满足条件的键删除,以释放内存。定期删除可以防止过期键堆积带来的内存压力。
答:Redis采用单进程单线程模型,不存在多线程竞争的问题。
同时,Redis使用事件驱动模式,通过epoll等技术来支持高并发,可以处理成千上万的并发连接。为了保证数据一致性,Redis提供了原子操作和事务支持,可以避免竞争问题。
答:Redis集群默认有16384个槽位。
如果某个节点缺少一个槽位,这个节点将无法正常工作,因为每个节点必须拥有完整的槽位范围才能正确处理对应的键。因此,如果某个节点缺少一个槽位,需要将这个节点重启并重新分配槽位,以确保它能够正常工作。
答:Redis使用一致性哈希算法来把数据分布到不同的节点上。
具体来说, Redis使用一个虚拟环形哈希空间来表示所有的节点。每个节点在这个空间上会被映射到一个或多个槽位。
在Redis集群中,这些槽位被动态地分配给各个节点。每个槽位代表了数据的一个部分,Redis把数据根据它们的key哈希到对应的槽位上,然后把这些数据存储在槽位所对应的节点上。
当我们向Redis写入数据时,Redis会根据key的哈希值找到对应的槽位,然后把数据写入到对应的节点上。这样就可以保证数据的高可用性和可扩展性。
Redis集群将整个数据集分成16384个槽位(slot),每个槽位可以存储一个键值对。集群中每个节点都可以负责多个槽位,而每个槽位只能被一个节点负责。所有节点负责的槽数量之和必须等于16384。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。