redis面试最新考察知识

1.什么是redis?

redis是一个key-value内存数据库,整个数据库系统的加载和对数据的操作全部在内存中进行,通过异步的方式定期将数据持久化到硬盘上。因为纯内存操作,redis读写性能可达到10万次/秒,是已知性能最快的内存数据库。

2.Redis的有哪些特点和优势?
(1)支持多种数据结构:string、hash、list、set、sorted set.
(2)读写性能最快
(3)支持持久化到硬盘
(4)单值支持最大1GB
(5)支持设置失效时间(expired)
4.redis 有哪些不足?
(1)容量大小依赖物理内存的大小,无法用于海量数据的高性能读写。

5.redis 的淘汰策略有哪些?
当redis达到最大内存限制,会执行淘汰策略,redis支持以下6种淘汰策略:
(1)no-eviction:不删除策略,达到最大内存时,直接返回错误信息
(2)allkeys-lru:在所有key中,删除最近最少使用的key。
(3)allkeys-random:在所有key中,随机删除部分key
(4)volatile-lru:在设定失效时间的集合中,删除最近最少使用的key
(5)volatile-ttl:在设定失效时间的集合中,优先删除即将过期的key
(6)volatile-random:在设定失效时间的集合中,随机删除部分key
6.一个字符串类型值最大存储容量是:512M。

7.redis集群方式有哪些,各有啥优缺点。
Redis集群主要有
(1) 基于客户端分片
代表:如jedis,实现了基于客户端分片。
优点:简单,性能高
缺点:
1) 业务数据与数据存储逻辑耦合,不方便维护
2) 不支持动态增删节点
3) 可运维性差,难以管理
(2) 基于代理分片
代表:codis,twemproxy
优点:透明的代理逻辑与存储逻辑隔离
缺点:多了一次代理转发,性能有所耗损
(3) 基于路由查询
代表:redis官方推出的集群方案,redis-cluster.
优点:
1) 官方推出,可线性扩展到1000个节点
2) 无中心架构
3) 客户端代理,免去proxy代理损耗
4) 使用hash槽
Redis-cluster原理
Hash slot。集群内的每个redis实例监听两个tcp端口,6379(默认)用于服务客户端查询,16379(默认服务端口 + 10000)用于集群内部通信。
key的空间被分到16384个hash slot里;
计算key属于哪个slot,CRC16(key) & 16384。
节点间状态同步:gossip协议,最终一致性。节点间通信使用轻量的二进制协议,减少带宽占用。

8.reids集群方案什么情况下导致不可用
如果集群种某个节点失败了,就会因为导致缺少key的插槽而不可用。

9.如何保证redis中的数据都是热点数据
通过redis的淘汰策略来进行保证。
配置淘汰策略:
(1) 找到redis.conf文件
(2) 设置maxmemory 大小
(3) 指定淘汰策略:maxmemory-policy allkeys-lru

8.redis 应用场景
(1)会话缓存
(2)全页缓存
(3)消息队列
(4)排行榜/计数器
(5)发布订阅

9.redis 支持的java客户端
Jedis,redisson,lettuce.官方推荐使用redisson

10.jedis和reddison的优缺点。
(1)jedis提供了比较全面的redis命令支持。
(2)reddison提供了实现分布式和可扩展的java数据结构。
(3)redisson不支持字符串操作
(4)redisson不支持排序、事物、管道、分区等redis特性。
(5)jedis使用阻塞IO,方法调用是同步,不支持异步,线程不安全。
(6)redisson使用是非阻塞IO和基于netty的事件驱动通信层,支持异步,线程安全。

11.redis设置密码和授权码
设置密码:config set requirepass 123456
设置授权码:auth 123456

12.redis 哈希槽的概念:
Redis哈希槽(hash slot)是redis集群中映射在各节点上用于存储key的一片内存。
原理:Redis集群共有16384个slot,当存入一个key-value时,每个key将通过CRC16校验,在对16384取模,得到一个在0-16383之间的编号,该编号来决定key放于哪个槽。
目的:解决分布式中因增删节点导致集群不可用的问题。

13.redis管道技术的作用
使得redis客户端向服务端发送多次请求而不用等待响应,最终可以一次性获取所有请求结果。

14.理解redis事物
(参考地址:)
https://www.cnblogs.com/DeepInThought/p/10720132.html
(1)redis事物的概念
Redis事物本质是一组命令的集合。
在一次事物执行中,按照顺序化、串行执行队中的命令,此时其他客户端提交的命令不加入该事物中。
总结:redis事物具有:一次性、顺序性、排他性
(2)redis事物不存在隔离级别
在执行EXEC命令前,redis将操作命令进行缓存,并没有真正执行。也就在事物中查询不到事物里的更新。
(3)redis事物不保证原子性
在redis中,单条命令保证原子性。事物不保证原子性,且没有回滚,任其失败。
(4)redis事物的三个阶段
1)开始事物
2)命令入列
3)执行事物
(5)redis事物的相关命令:
1)watch:监视key在事物启动前是否改动
2)multi:标记事物块的开始
3)exec:执行所有事物块
4)discard:取消事物
5)unwatch:取消对所有key的监控

15.redis设置过期时间和永久生效
EXPIRE key seconds 指定时间内生效
PERSIST key 永久生效

  1. 如何优化redis内存?
    (1)缩减键值对象的长度:简化键名。
    (2)共享对象池:使用整数对象池进行共享,节省内存。即值对象尽可能使用整数。
    (3)尽可能使用hash数据结构,减少key的数量。
    (4)配置内存上限,使用回收策略
    (5)使用redisObject来进行封装
    (6)为redisObject指定合适的字段值
    1)type:对象类型
    2)encoding:对象编码类型

17.redis如何进行大量数据插入
从redis2.6开始,redis可使用pipe mode进行大量数据插入。
步骤:
·准备一个批量插入redis命令的文本文件
·将这些命令转换为redis支持的协议
·利用管道命令进行执行:redis-cli –pipe

18.使用redis分区的原因是什么?
为了让redis管理更大的内存,使得其计算能力成倍提升。

19.redis分区有什么缺点?
(1)涉及多个key的操作通常不被支持,如:
·不能直接使用交集指令,对两个集合求交集
·同时操作多个key,不能使用redis事物。
·不能使用太长的key存储一个数据集合
(2)数据处理复杂,如:
·备份不同的实列主机的redis需要同时备份RDB和AOF文件
(3)动态扩容和缩容非常复杂
20.redis持久化数据和缓存时如何做扩容?
(1)做持久化时,使用redis集群做扩容
(2)做缓存时,使用一致性hash实现动态扩容

21.一个redis实例最多能存放多少keys?List,Set,Sorted Set最多能放多少keys?
(1)理论上一个redis实例最多能方法232个keys,实际中一个redis实例可放2.5亿个keys。
(2)List,Set,Sorted Set最多能放232个keys
(3)redis存储极限与内存中的可用内存有关
22.redis常见性能和解决方案?
(1)Master最好不要做任何持久化工作。
(2)如果数据比较重要,让其中的一个slave开启AOF备份,策略设置为每秒同步一次。
(3)Master和slave最好在同一局域网内
(4)尽量避免在压力很大的主库上面增加从库
(5)主从复制尽量不要使用图状结构,尽量使用单向链表。

23.redis提供了几种持久化方式
(1)RDB:对数据进行快照存储
(2)AOF:对写操作进行记录
区别:
(1) RDB持久化是指在指定时间间隔内,将内存中的数据集快照写入磁盘,实际操作一个fork子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,再用二进制压缩存储
(2) AOF持久化是以日志的形式记录redis的每一个存、删操作的记录。

全部评论

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务