Redis是什么?
1 基于内存运行,性能高效
2 支持分布式,理论上可以无限扩展
3 key-value存储系统
4 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
Redis有哪些应用场景?
缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统
Redis有什么优势?
Redis为什么这么快?
Redis主要消耗什么物理资源?
内存
Redis为什么把所有数据放到内存中?
为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以Redis具有快速和数据持久化的特性
Redis命令是原子性的吗?
是
Redis磁盘快照操作是原子的吗?
Redis怎么测试连通性?
Redis到底是单线程还是多线程?
Redis和Memcache有什么区别?
这是一个和Redis非常相似的数据库,但是它的数据类型没有Redis丰富。Memcache由LiveJournal的Brad Fitzpatrick开发,作为一套分布式的高速缓存系统,被许多网站使用以提升网站的访问速度,对于一些大型的、需要频繁访问数据库的网站访问速度的提升效果十分显著
Redis支持哪些数据类型?
String list hash set sorted set
Redis支持JSON数据类型吗?为什么?
支持
Redis模块系统有什么用?
Redis支持对象映射模型吗?
Redis默认支持多少个数据库?怎么修改?
默认支持16个数据库
通过修改Redis的配置文件/redis/redis.conf中的databases字段的值,设置完毕并重启Redis即可完成配置。
Redis SET命令可以代替SETNX吗?
Redis单个实例最多能存放多少个键?
官方给出,理论值是 2 的 32 次方个
Redis单个Set, List最多能存放多少个元素?
Redis最大key大小和String值最大存储多少?
redis的key和string类型value限制均为512MB
Redis事务有什么用?
Redis事务相关的命令有哪几个?
multi,标记一个事务块的开始,返回 ok
exec,执行所有事务块内,事务块内所有命令执行的先后顺序的返回值,操作被,返回空值 nil
discard,取消事务,放弃执行事务块内的所有命令,返回 ok
watch,监视 key 在事务执行之前是否被其他指令改动,若已修改则事务内的指令取消执行,返回 ok
unwatch,取消 watch 命令对 key 的监视,返回 ok
Redis事务是原子性的吗?
Redis持久化有什么用?
在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉
Redis有哪几种持久化方式?
RDB(Redis DataBase)和AOF(Append Only File)
>RDB方式采用的思想是定时将内存中的数据进行快照,并写入dump.rdb文件当中,这个文件当中所存储的就是当前redis环境中的配置以及数据。每次当redis重启之后,redis会先读dump.rdb文件,将数据从硬盘写入到内存中
AOP模式做持久化,把所有的写操作命令记录到磁盘文件中保存,也就是说使用AOF会将客户端对于redis的操作(查询除外)以一个字符串的形式记录到磁盘的文件中去,而在启动redis的时候会去读取这一个文件,将命令执行
Redis持久化方式如何选择?
如何保证Redis中的数据都是热点数据?
Redis内存满了怎么办?
定时删除:为每个键设置一个定时器,一旦过期时间到了,则将键删除。这种策略对内存很友好,但是对 CPU 不友好,因为每个定时器都会占用一定的 CPU 资源。 惰性删除:不管键有没有过期都不主动删除,等到每次去获取键时再判断是否过期,如果过期就删除该键,否则返回键对应的值。这种策略对内存不够友好,可能会浪费很多内存。 定期扫描:系统每隔一段时间就定期扫描一次,发现过期的键就进行删除。这种策略相对来说是上面两种策略的折中方案,需要注意的是这个定期的频率要结合实际情况掌控好,使用这种方案有一个缺陷就是可能会出现已经过期的键也被返回。
Redis怎么配置最大内存容量?
Redis有哪些淘汰策略?
noenviction:Redis 的默认策略,不回收数据,当达到最大内存时,新增数据返回 error
volatile 是对已设置过期时间的数据集淘汰数据:
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中,使用LRU算法淘汰最近最少使用的数据
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中,越早过期的越优先被淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中,随机淘汰数据
allkeys 是从全部数据集淘汰数据
allkeys-lru:从数据集(server.db[i].dict)中,使用LRU算法淘汰最近最少使用的数据
allkeys-random:从数据集(server.db[i].dict)中,随机淘汰数据
Redis怎么配置淘汰策略?
配置文件 maxmemory-policy volatile-lru
Redis为什么新增了LFU淘汰策略?
Redis淘汰策略LRU和LFU的区别?
Redis过期键的删除策略有哪些?
Redis如何提高多核CPU利用率?
Redis如何实现大量数据插入?
Redis的回收进程如何工作的?
1 一个客户端运行了新的命令,添加了新的数据。 redis检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收。
2 一个新的命令被执行等等,所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断回收回到 边界以下。
3 如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限 制就会被这个内存使用量超越。
Redis怎么尽量降低内存使用?
Redis为什么要避免使用合并操作?
Redis中的管道有什么用?
Redis有哪些高可用方案?
- Redis 主从复制;
- Redis Sentinel(哨兵);
- Redis Cluster(集群);
- Codis(第三方)
- twemproxy(第三方)
Redis集群的目的是什么?
Redis集群如何选择数据库?
Redis 集群目前无法做数据库选择,默认在 0 数据库
Redis集群怎么保证高可用?
Redis集群最少需要几个主节点?
Redis集群主从复制的原理是?
1 设置主节点的地址和端口
2 建立套接字连接
3 发送PING命令
4 权限验证
5 同步
6 命令传播
Redis集群是怎么做数据分片的?
Redis集群会不会出现写丢失?
Redis可以保证数据强一致性吗?
Redis支持的Java客户端有哪些?
Redisson是什么框架?
Redis和Redison有什么关系?
Jedis和Redissn对此有什么优缺点?
Redis为什么不提供Windows版本?
Redis怎么在Windows下使用?
Redis如何设置密码访问?
Redis如何分析慢查询操作?
什么是缓存预热?
新的缓存系统没有任何缓存数据,在缓存重建数据的过程中,系统性能和数据库负载都不太好,所以最好是在系统上线之前就把要缓存的热点数据加载到缓存中,这种缓存预加载手段就是预热。
什么是缓存热备?
缓存热备即当一台服务器不可用时能实时切换到备用缓存服务器,不影响缓存使用。集群模式下,每个主节点都会有一个或多个从几点来当备用,一旦主节点挂掉,从节点立即充当主节点使用。
什么是缓存雪崩?
Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”
如何解决缓存雪崩?
使用Redis集群
限流
什么是缓存穿透?
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透
如何解决缓存穿透?
1 布隆过滤
什么是缓存击穿?
第一次访问
恶意访问不存在的key
Key过期
如何解决缓存击穿?
服务器启动时, 提前写入
规范key的命名, 通过中间件拦截
对某些高频访问的Key,设置合理的TTL或永不过期
什么是缓存抖动?
一般是由于缓存节点故障导致
如何解决缓存抖动?
什么是缓存无底洞?
memberche