Redis面试专题及答案
史上最全Redis面试49题(含答案)哨兵+复制+事务+集群+持久化等

Redis主要有哪些功能?1.哨兵(Sentinel)和复制(Replication)Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。
Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能,Replication则是负责让一个Redis服务器可以配备多个备份的服务器。
Redis也是利用这两个功能来保证Redis的高可用的2.事务很多情况下我们需要一次执行不止一个命令,而且需要其同时成功或者失败。
redis对事务的支持也是源自于这部分需求,即支持一次性按顺序执行多个命令的能力,并保证其原子性。
3.LUA脚本在事务的基础上,如果我们需要在服务端一次性的执行更复杂的操作(包含一些逻辑判断),则lua就可以排上用场了4.持久化redis的持久化指的是redis会把内存的中的数据写入到硬盘中,在redis重新启动的时候加载这些数据,从而最大限度的降低缓存丢失带来的影响。
5.集群(Cluster)单台服务器资源的总是有上限的,CPU资源和IO资源我们可以通过主从复制,进行读写分离,把一部分CPU和IO的压力转移到从服务器上,这也有点类似mysql数据库的主从同步。
在Redis官方的分布式方案出来之前,有twemproxy和codis两种方案,这两个方案总体上来说都是依赖proxy来进行分布式的。
Redis支持哪几种数据类型?支持多种类型的数据结构1.string:最基本的数据类型,二进制安全的字符串,最大512M。
2.list:按照添加顺序保持顺序的字符串列表。
3.set:无序的字符串集合,不存在重复的元素。
4.sorted set:已排序的字符串集合。
5.hash:key-value对的一种集合。
Redis是单进程单线程的?Redis是单进程单线程的,Redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
Redis面试题及答案

60%-70%是由于水污染造成的。
我国水体污染主要来源于超标排放的工业废水和大量未经处理直接进入水体的城市生活污水。
城市生活污水正成为水污染的最大“公害”之一。
因此,城市生活污水的处理对于改善城市环境质量与居民生存环境,促进社会的可持续发展具有十分重要的意义。
与国际相比,我国城市污水处理率较低,其主Redis是一个基于内存的高性能key-value数据库。
(有空再补充,有理解错误或不足欢迎指正)Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。
因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-ValueDB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value 的最大限制是1GB,不像memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的Set可以做高性能的tag系统等等。
另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一个功能加强版的memcached来用。
Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
Redis支持的数据类型Redis通过Key-Value的单值不同类型来区分,以下是支持的类型:StringsListsSets求交集、并集SortedSethashes为什么redis需要把所有数据放到内存中?Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。
所以redis具有快速和数据持久化的特征。
Redis常问的40道面试题(答案)

Redis常问的40道面试题(答案)1、什么是Redis?Redis 是完全开源免费的,遵守BSD 协议,是一个高性能的key-value 数据库。
Redis 与其他key - value 缓存产品有以下三个特点:(1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)Redis 不仅仅支持简单的key-value 类型的数据,同时还提供list,set,zset,hash 等数据结构的存储。
(3)Redis 支持数据的备份,即master-slave 模式的数据备份。
Redis 优势(1)性能极高–Redis 能读的速度是110000 次/s,写的速度是81000 次/s 。
(2)丰富的数据类型–Redis 支持二进制案例的Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。
(3)原子–Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。
单个操作是原子性的。
多个操作也支持事务,即原子性,通过MULTI 和EXEC指令包起来。
(4)丰富的特性–Redis 还支持publish/subscribe, 通知, key 过期等等特性。
Redis 与其他key-value 存储有什么不同?(1)Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
(2)Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。
在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Redis 面试题及答案

Redis 面试题及答案(40题)1、什么是Redis?Redis 是完全开源免费的,遵守BSD 协议,是一个高性能的key-value 数据库。
Redis 与其他key - value 缓存产品有以下三个特点:(1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)Redis 不仅仅支持简单的key-value 类型的数据,同时还提供list,set,zset,hash 等数据结构的存储。
(3)Redis 支持数据的备份,即master-slave 模式的数据备份。
Redis 优势(1)性能极高–Redis 能读的速度是110000 次/s,写的速度是81000 次/s 。
(2)丰富的数据类型–Redis 支持二进制案例的Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。
(3)原子–Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。
单个操作是原子性的。
多个操作也支持事务,即原子性,通过MULTI 和EXEC指令包起来。
(4)丰富的特性–Redis 还支持publish/subscribe, 通知, key 过期等等特性。
Redis 与其他key-value 存储有什么不同?(1)Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
(2)Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。
在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
redis面试题目及答案

redis面试题目及答案1. 介绍Redis及其特点Redis(Remote Dictionary Server)是一个开源、内存数据结构存储系统,用于存储和缓存数据,常被用作数据库、缓存和消息中间件。
其具有以下特点:- 高性能: Redis通过将数据存储在内存中,实现了快速读写操作,平均每秒可以处理超过100k个写入操作,每秒读取达到超过110k个操作。
- 数据结构丰富: Redis支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等,使得开发人员能够根据需求选择适合的数据结构。
- 持久化支持: Redis提供了RDB(Redis Database)和AOF (Append Only File)两种持久化方式,可以将内存中的数据定期保存到硬盘以实现数据的持久化。
- 高可用性: Redis支持主从复制和Sentinel机制,保证了数据的高可用性和容错性。
- 扩展性: Redis支持数据分片,并可以使用Redis Cluster实现自动分片和数据复制,以支持海量数据存储和高并发访问。
2. 什么是Redis的数据类型?请列举并简单解释每种数据类型。
Redis支持以下数据类型:- 字符串(String): Redis中最基本的数据类型,可以存储字符串、整数或二进制数据。
常用操作包括设置值、获取值、追加字符串、自增等。
- 哈希表(Hash): Redis的哈希表类似于其他编程语言中的HashMap,适合存储对象。
常用操作包括设置字段值、获取字段值、删除字段等。
- 列表(List): Redis的列表是一个按照插入顺序排序的字符串元素集合,允许在首位或末尾添加、删除、更新元素。
可用于实现栈、队列等数据结构。
- 集合(Set): Redis的集合是一个无序、唯一的字符串元素集合,支持添加、删除、判断元素是否存在等操作。
可用于实现朋友关系、标签关系等。
- 有序集合(Sorted Set): Redis的有序集合与集合类似,但每个元素都会关联一个分数,根据分数进行排序。
redis面试题及答案

redis面试题及答案Redis是一种开源的内存数据结构存储系统,它被广泛应用于缓存、消息队列、持久化和实时分析等场景。
在面试中,Redis常常成为考察候选人的重要方向。
下面将介绍一些常见的Redis面试题及其答案。
1. Redis的优点有哪些?- 快速:Redis将数据存储在内存中,因此读写速度非常快。
- 支持多种数据结构:Redis支持字符串、哈希表、列表、集合、有序集合等多种数据结构。
- 持久化:Redis提供了持久化选项,可以将数据保存到磁盘上,并在重启后恢复。
- 分布式:Redis支持分布式部署,可以通过Cluster或者Replication 实现高可用性和负载均衡。
- 可扩展性:Redis支持主从复制、读写分离等机制,可以很方便地进行水平扩展。
- 丰富的功能:Redis提供了丰富的功能,如发布订阅、事务、Lua脚本等。
2. Redis的数据结构有哪些?请简要介绍各个数据结构。
- 字符串(String):最基本的数据结构,可以存储字符串、整数或浮点数。
- 哈希表(Hash):由键值对组成的无序散列表,适用于存储对象。
- 列表(List):按照插入顺序排序的字符串列表,支持从两端插入和删除元素。
- 集合(Set):无序且唯一的字符串集合,支持交集、并集、差集等操作。
- 有序集合(Sorted Set):类似于集合,但每个元素都关联了一个分数,可以按照分数排序。
3. Redis的持久化机制有哪些?请简要介绍各个机制。
- RDB(Redis Database):将数据库的快照保存到磁盘上,适用于备份和恢复。
- AOF(Append Only File):将写操作追加到文件末尾,以日志的形式记录数据库状态的变化,适用于数据持久化和持久化后的恢复。
4. Redis的主从复制是什么?请简要介绍主从复制的工作原理。
Redis主从复制指的是将一个Redis服务器的数据复制到其他Redis服务器的过程。
redis面试题

redis面试题1.Redis是什么?它有哪些特点?答案:Redis是一种基于内存的键值对存储系统,它支持存储多种类型的数据,如字符串、哈希表、列表、集合和有序集合。
Redis的特点包括高速读写、持久化、原子操作、丰富的数据结构、发布订阅、事务等。
2.Redis支持哪些数据结构?它们的特点是什么?答案:Redis支持字符串、哈希表、列表、集合和有序集合等数据结构。
字符串是最基本的数据结构,它们是不可变的,可以附带一个过期时间。
哈希表可以存储多个键值对,并且可以获取单个键或多个键的值。
列表是一个有序字符串列表,可以进行常见操作,如插入、删除、获取等。
集合是无序的字符串集合,可以进行集合操作,如并集、交集等。
有序集合是带有权值的集合,可以进行排序和范围查询等操作。
3.Redis的持久化机制是什么?它们的特点和优缺点是什么?答案:Redis支持两种持久化机制,RDB和AOF。
RDB通过生成数据快照进行持久化,可以在短时间内完成,但可能会丢失最近一次快照之后修改的数据。
AOF通过记录Redis的所有写操作命令到一个追加日志文件进行持久化,可以保证数据的完整性,但可能会影响写操作的性能。
4.Redis的并发模型是什么?它如何处理并发访问?答案:Redis是单线程的,但它使用了读写分离和分片等技术来提高并发性能。
主线程负责处理写操作和部分读操作,而多个从线程可以处理其他读操作。
这样可以将读操作的负载分散到多个从服务器上,提高系统的并发能力。
5.Redis的分布式部署方案有哪些?它们的特点和优缺点是什么?答案:Redis的分布式部署方案包括主从复制、Redis Sentinel和Redis Cluster。
主从复制可以实现数据备份和负载均衡,但主节点故障时需要手动切换到从节点。
Redis Sentinel可以自动检测故障并进行切换,但只能处理单个主节点的情况。
Redis Cluster可以实现自动分片和故障恢复,但数据分布不均匀且实现复杂。
redis面试问题

redis面试问题Redis面试问题Redis是一种高性能的键值存储数据库,被广泛应用于各种大型网站和应用程序中。
如果你正在寻找一份与Redis相关的工作,那么你需要准备好回答一些常见的Redis面试问题。
下面是一些常见的Redis面试问题和答案。
一、基础概念1. 什么是Redis?Redis是一个开源、高性能、键值存储数据库。
它支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合等。
Redis提供了丰富的命令集,可以实现诸如缓存、消息队列和计数器等功能。
2. Redis支持哪些数据结构?Redis支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合等。
3. Redis有哪些优点?Redis具有以下优点:(1)高性能:Redis采用内存存储方式,读写速度非常快。
(2)丰富的数据结构:Redis支持多种数据结构,可以满足不同场景下的需求。
(3)分布式:Redis可以通过主从复制和分片技术实现分布式部署。
(4)可靠性高:Redis提供了持久化机制来保证数据不会丢失。
4. Redis有哪些缺点?Redis的缺点主要有以下几点:(1)内存限制:由于Redis采用内存存储方式,所以受到内存容量的限制。
(2)数据持久化:Redis提供了持久化机制,但是相对于传统关系型数据库来说,数据持久化方面还有一些不足之处。
(3)单线程模型:Redis采用单线程模型,不能充分利用多核CPU 的性能。
二、命令1. Redis支持哪些命令?Redis支持丰富的命令集,包括字符串操作、哈希表操作、列表操作、集合操作和有序集合操作等。
常见的命令如下:(1)字符串操作:SET、GET、INCR、DECR等。
(2)哈希表操作:HSET、HGET、HDEL等。
(3)列表操作:LPUSH、RPUSH、LPOP、RPOP等。
(4)集合操作:SADD、SMEMBERS、SINTER等。
(5)有序集合操作:ZADD、ZRANK、ZREVRANGE等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
redis和memcached什么区别?为什么高并发下有时单线程的redis比多线程的memcached效率要高?区别:1.mc可缓存图片和视频。
rd支持除k/v更多的数据结构;2.rd可以使用虚拟内存,rd可持久化和aof灾难恢复,rd通过主从支持数据备份;3.rd可以做消息队列。
原因:mc多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。
redis主从复制如何实现的?redis的集群模式如何实现?redis的key是如何寻址的?主从复制实现:主节点将自己内存中的数据做一份快照,将快照发给从节点,从节点将数据恢复到内存中。
之后再每次增加新数据的时候,主节点以类似于mysql的二进制日志方式将语句发送给从节点,从节点拿到主节点发送过来的语句进行重放。
分片方式:-客户端分片-基于代理的分片●Twemproxy●codis-路由查询分片●Redis-cluster(本身提供了自动将数据分散到Redis Cluster不同节点的能力,整个数据集合的某个数据子集存储在哪个节点对于用户来说是透明的)redis-cluster分片原理:Cluster中有一个16384长度的槽(虚拟槽),编号分别为0-16383。
每个Master节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,可以由用户指定,也可以在初始化的时候自动生成,只有Master才拥有槽的所有权。
Master节点维护着一个16384/8字节的位序列,Master节点用bit来标识对于某个槽自己是否拥有。
比如对于编号为1的槽,Master只要判断序列的第二位(索引从0开始)是不是为1即可。
这种结构很容易添加或者删除节点。
比如如果我想新添加个节点D, 我需要从节点A、B、C中得部分槽到D上。
使用redis如何设计分布式锁?说一下实现思路?使用zk可以吗?如何实现?这两种有什么区别?redis:1.线程A setnx(上锁的对象,超时时的时间戳t1),如果返回true,获得锁。
2.线程B 用get获取t1,与当前时间戳比较,判断是是否超时,没超时false,若超时执行第3步;3.计算新的超时时间t2,使用getset命令返回t3(该值可能其他线程已经修改过),如果t1==t3,获得锁,如果t1!=t3说明锁被其他线程获取了。
4.获取锁后,处理完业务逻辑,再去判断锁是否超时,如果没超时删除锁,如果已超时,不用处理(防止删除其他线程的锁)。
zk:1.客户端对某个方法加锁时,在zk上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点node1;2.客户端获取该路径下所有已经创建的子节点,如果发现自己创建的node1的序号是最小的,就认为这个客户端获得了锁。
3.如果发现node1不是最小的,则监听比自己创建节点序号小的最大的节点,进入等待。
4.获取锁后,处理完逻辑,删除自己创建的node1即可。
区别:zk性能差一些,开销大,实现简单。
知道redis的持久化吗?底层如何实现的?有什么优点缺点?RDB(Redis DataBase:在不同的时间点将redis的数据生成的快照同步到磁盘等介质上):内存到硬盘的快照,定期更新。
缺点:耗时,耗性能(fork+io操作),易丢失数据。
AOF(Append Only File:将redis所执行过的所有指令都记录下来,在下次redis重启时,只需要执行指令就可以了):写日志。
缺点:体积大,恢复速度慢。
bgsave做镜像全量持久化,aof做增量持久化。
因为bgsave会消耗比较长的时间,不够实时,在停机的时候会导致大量的数据丢失,需要aof来配合,在redis实例重启时,优先使用aof来恢复内存的状态,如果没有aof日志,就会使用rdb文件来恢复。
Redis会定期做aof重写,压缩aof文件日志大小。
Redis4.0之后有了混合持久化的功能,将bgsave的全量和aof的增量做了融合处理,这样既保证了恢复的效率又兼顾了数据的安全性。
bgsave的原理,fork和cow, fork是指redis通过创建子进程来进行bgsave操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。
redis过期策略都有哪些?LRU算法知道吗?写一下java代码实现?过期策略:定时过期(一key一定时器),惰性过期:只有使用key时才判断key是否已过期,过期则清除。
定期过期:前两者折中。
LRU:new LinkedHashMap<K, V>(capacity, DEFAULT_LOAD_FACTORY, true);//第三个参数置为true,代表linkedlist按访问顺序排序,可作为LRU缓存;设为false代表按插入顺序排序,可作为FIFO缓存LRU算法实现:1.通过双向链表来实现,新数据插入到链表头部;2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3.当链表满的时候,将链表尾部的数据丢弃。
LinkedHashMap:HashMap和双向链表合二为一即是LinkedHashMap。
HashMap是无序的,LinkedHashMap通过维护一个额外的双向链表保证了迭代顺序。
该迭代顺序可以是插入顺序(默认),也可以是访问顺序。
缓存穿透、缓存击穿、缓存雪崩解决方案?缓存穿透:指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。
解决方案:1.查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短;2.布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对DB的查询。
缓存击穿:对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把DB压垮。
解决方案:1.使用互斥锁:当缓存失效时,不立即去load db,先使用如Redis的setnx去设置一个互斥锁,当操作成功返回时再进行load db的操作并回设缓存,否则重试get缓存的方法。
2.永远不过期:物理不过期,但逻辑过期(后台异步线程去刷新)。
缓存雪崩:设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。
与缓存击穿的区别:雪崩是很多key,击穿是某一个key缓存。
解决方案:将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
在选择缓存时,什么时候选择redis,什么时候选择memcached选择redis的情况:1、复杂数据结构,value的数据是哈希,列表,集合,有序集合等这种情况下,会选择redis, 因为memcache无法满足这些数据结构,最典型的的使用场景是,用户订单列表,用户消息,帖子评论等。
2、需要进行数据的持久化功能,但是注意,不要把redis当成数据库使用,如果redis 挂了,内存能够快速恢复热数据,不会将压力瞬间压在数据库上,没有cache预热的过程。
对于只读和数据一致性要求不高的场景可以采用持久化存储3、高可用,redis支持集群,可以实现主动复制,读写分离,而对于memcache如果想要实现高可用,需要进行二次开发。
4、存储的内容比较大,memcache存储的value最大为1M。
选择memcache的场景:1、纯KV,数据量非常大的业务,使用memcache更合适,原因是,a)memcache的内存分配采用的是预分配内存池的管理方式,能够省去内存分配的时间,redis是临时申请空间,可能导致碎片化。
b)虚拟内存使用,memcache将所有的数据存储在物理内存里,redis有自己的vm机制,理论上能够存储比物理内存更多的数据,当数据超量时,引发swap,把冷数据刷新到磁盘上,从这点上,数据量大时,memcache更快c)网络模型,memcache使用非阻塞的IO复用模型,redis也是使用非阻塞的IO复用模型,但是redis还提供了一些非KV存储之外的排序,聚合功能,复杂的CPU计算,会阻塞整个IO调度,从这点上由于redis提供的功能较多,memcache更快些d) 线程模型,memcache使用多线程,主线程监听,worker子线程接受请求,执行读写,这个过程可能存在锁冲突。
redis使用的单线程,虽然无锁冲突,但是难以利用多核的特性提升吞吐量。
缓存与数据库不一致怎么办假设采用的主存分离,读写分离的数据库,如果一个线程A先删除缓存数据,然后将数据写入到主库当中,这个时候,主库和从库同步没有完成,线程B从缓存当中读取数据失败,从从库当中读取到旧数据,然后更新至缓存,这个时候,缓存当中的就是旧的数据。
发生上述不一致的原因在于,主从库数据不一致问题,加入了缓存之后,主从不一致的时间被拉长了处理思路:在从库有数据更新之后,将缓存当中的数据也同时进行更新,即当从库发生了数据更新之后,向缓存发出删除,淘汰这段时间写入的旧数据。
主从数据库不一致如何解决场景描述,对于主从库,读写分离,如果主从库更新同步有时差,就会导致主从库数据的不一致1、忽略这个数据不一致,在数据一致性要求不高的业务下,未必需要时时一致性2、强制读主库,使用一个高可用的主库,数据库读写都在主库,添加一个缓存,提升数据读取的性能。
3、选择性读主库,添加一个缓存,用来记录必须读主库的数据,将哪个库,哪个表,哪个主键,作为缓存的key,设置缓存失效的时间为主从库同步的时间,如果缓存当中有这个数据,直接读取主库,如果缓存当中没有这个主键,就到对应的从库中读取。
Redis常见的性能问题和解决方案1、master最好不要做持久化工作,如RDB内存快照和AOF日志文件2、如果数据比较重要,某个slave开启AOF备份,策略设置成每秒同步一次3、为了主从复制的速度和连接的稳定性,master和Slave最好在一个局域网内4、尽量避免在压力大得主库上增加从库5、主从复制不要采用网状结构,尽量是线性结构,Master<--Slave1<----Slave2 ....Redis的数据淘汰策略有哪些voltile-lru 从已经设置过期时间的数据集中挑选最近最少使用的数据淘汰voltile-ttl 从已经设置过期时间的数据库集当中挑选将要过期的数据voltile-random 从已经设置过期时间的数据集任意选择淘汰数据allkeys-lru 从数据集中挑选最近最少使用的数据淘汰allkeys-random 从数据集中任意选择淘汰的数据no-eviction 禁止驱逐数据Redis当中有哪些数据结构字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。