摘要:Redis作为目前的主流NoSql数据库,不会是不可能的,在面试中也是非常高频的,一定不能在这个环节丢分,不管是学习,还是面试,以下知识点,都有必要掌握。一般来说生成环境不会用到,了解一下也有好处的。一般来说我们的线上都会采取混合持久化。高级功能能比较多,文档也比较丰富,但实用上复杂度也相对高。
作为目前主流的NoSql数据库,Redis也不是没有可能。 在面试中也经常使用。 您不得在此链接中失去积分。 无论是学习还是面试,都需要掌握以下知识点。
1.Redis是什么?
Redis 是一个开源(BSD 许可)内存中数据结构存储,可用作数据库、缓存和消息代理。 它是一个基于键值对的NoSQl数据库。
2.Redis的特点? 3.Redis适合的应用场景? 4.除了Redis,你还知道哪些NoSQL数据库?
MongoDB、MemcacheDB、Cassandra、CouchDB、Hypertable、Leveldb。
5.Redis和Memcache有什么区别?
支持的存储类型不同,memcached只支持简单的k/v结构。 Redis支持更多类型的存储结构类型(具体参见问题6)。
Memcached数据不可恢复,而redis可以将数据持久化到磁盘。
新版本的redis直接构建了自己的VM机制。 一般系统如果调用系统函数,会浪费一定的时间去移动和请求。
当redis耗尽物理内存时,它可以将长时间未使用的值交换到磁盘。
6.Redis有多少种数据类型?
基础知识:字符串、散列、列表、集合、有序集合(zset)。
还有HyperLogLog、流、地理坐标等。
7.Redis有哪些高级功能?
消息队列、自动过期删除、事务、数据持久化、分布式锁、就近人员、慢查询分析、Sentinel和集群等诸多功能。
8.你安装了Redis吗? 能简单解释一下步骤吗?
下载Redis指定版本源码安装包并压缩到当前目录。
9、redis主要的可执行文件有哪些? 有什么区别?
10、Redis的启动方式有哪几种?
1.默认配置:
./redis-server
2. 运行startup: redis-server 并修改配置名称和值(可以是多对)。 如果没有配置,则使用默认配置。
例如:redis-server——端口7359
3.指定启动的配置文件:
./redis-server /opt/redis/redis.conf
11.Redis配置需要自己写吗? 如何配置?
redis目录下有redis.conf的模板配置。 所以只需复制模板配置并修改即可。
一般来说,大多数生产环境都会通过指定配置文件来启动redis。
12.如何执行Redis客户端命令?
1.互动方式:
redis-cli -h 127.0.0.1 -p 6379
连接到redis后,后面执行的命令就可以交互实现了。
2、命令行模式:
redis-cli -h 127.0.0.1 -p 6379 get value
13、如何停止redis服务?
Kill -9 pid(粗鲁,请不要使用,不仅数据不会持久化,缓存区等资源也不会被优雅关闭)
可以使用redis shutdown命令选择关闭前是否保留数据。
redis-cli shutdown nosave|save
14. 如何检查当前key是否存在?
exists key
15.如何删除数据?
del key
16.redis为什么快? 单线程? 17.字符串的最大长度是多少?
512MB
18.redis默认有多少个数据库?
16
19.redis的持久化方式有哪些?
RDB、AOF、混合持久化。
20.RDB持久化?
RDB(Redis DataBase)持久化是生成当前流程数据快照并保存到硬盘的过程。
提示:以二进制格式写入磁盘。
21.RDB持久化是如何触发的?
手动触发:
自动触发:
22.RDB有什么优点? 23.RDB的缺点? 24. 如何禁用持久化?
一般来说,生成环境不会用到,了解一下还是有好处的。
config set save ""
25.AOF持久化?
AOF(append only file) 为了解决RDB无法实时持久化的问题,AOF可以解决。 将每条命令以独立日志的方式记录到aof文件中。
26.如何查看AOF是否启用?
config get appendonly
27.如何启用AOF?
命令行方式:实时有效,重启后无效。
config set appendonly
配置文件:需要重启才能生效,重启后仍然生效。
appendonly yes
28.AOF工作流程? 所有写入命令都会附加到 aof_buf 缓冲区。 AOF缓冲区根据相应的策略对硬盘进行同步操作。 随着AOF文件变得越来越大,AOF文件需要定期重写以实现压缩。 当redis服务器重启时,可以加载AOF文件进行数据恢复。 29、为什么AOF需要先将命令追加到缓冲区(aof_buf)?
Redis 使用单线程来响应命令。 如果每个文件写入命令都直接追加到硬盘,性能将取决于硬盘的负载。 如果使用缓冲区,redis提供了多种缓冲区策略来平衡性能和安全性。
30.AOF持久化是如何触发的?
自动触发:满足设定策略并满足重写触发。
策略:(在配置文件中配置)
手动触发:(执行命令)
bgrewriteaof
31.AOF的优点? 32.AOF的缺点? 33. 混合持久化? 的优点和缺点?
一般来说,我们在线上采用混合持久化。 从redis 4.0开始,添加了新的混合持久化方法。
优势:
缺点:
34.Redis官方有推荐的Java客户端吗? 实际选择?
官方推荐的类型有Jedis、Redisson和lettuce三种。
一般来说,最常用的是:Jedis|Redisson。
Jedis:比较轻量,简单,不支持读写分离,需要我们自己实现,文档相对较少。 API对Redis命令提供了比较全面的支持。
Redisson:基于Netty,性能高,支持异步请求。 提供了很多分布式相关的运营服务。 有更高级的功能和更丰富的文档,但实用复杂度也比较高。 与Jedis相比,其功能更简单memcache redis 比较,不支持字符串操作、排序、事务、管道、分区等Redis功能。
35.Redis事务?
事务提供了一种打包多个命令请求并一次按顺序执行多个命令的机制。并且在事务执行过程中,服务器不会中断事务并执行其他客户端命令请求,而是会执行其他命令请求。
36.Redis事务从开始到结束有哪些阶段? 37.Redis中key的过期操作?
设置key的生存时间为n秒
expire key nseconds
将密钥的生存时间设置为纳毫秒
pxpire key milliseconds
将过期时间设置为时间戳指定的时间戳(以秒为单位)
expireat key timespamp
设置过期时间为timestamp毫秒时间戳
pexpireat key millisecondsTimestamp
38.Redis过期key删除策略? 39.什么是管道? 你为什么需要它?
命令批处理技术将命令组装起来,然后一次执行多个命令。
可以有效节省RTT(往返时间)。
测试和验证:
40.如何获取当前最大内存? 如何动态设置呢?
获取最大内存:
config get maxmemory
设置最大内存:
命令设置:
config set maxmemory 1GB
41.Redis内存溢出控制?
当Redis使用的内存达到maxmemory上限时,就会启动相应的溢出策略。
42.Redis内存溢出策略?
noeviction(默认策略):拒绝所有写操作并返回客户端错误信息(error),使用内存时不允许OOM命令,只响应读操作。
43.Redis高可用解决方案?
Redis Sentinel可以自动完成故障发现和转移。
44.Redis集群解决方案?
Twemproxy、Redis 集群、Codis。
45.Redis集群槽位范围?
0~16383
46.Redis锁的实现思路?
setnx(如果不存在则设置)memcache redis 比较,如果创建成功则表示获得锁。
setnx lock true 创建锁
del 锁 释放锁
如果中途崩溃了,锁就无法释放了?
这时就需要考虑超时问题。 例如:锁过期300
由于该命令是非原子的,因此仍然会出现死锁。 怎么解决呢?
Redis支持set以及设置超时的功能。
例如:设置锁定 true ex 30 nx
47.什么是布隆过滤器?
它是由Bloom于1970年提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。 布隆过滤器可用于检索元素是否在集合中。 它的优点是空间效率和查询时间都比普通算法好很多。 其缺点是有一定的误识别率和删除困难。
Tips:当判断一定存在时,可能会误判。 当判断它不存在时,它一定不存在。
48.什么是缓存穿透? 解决问题?
缓存穿透:缓存层未命中、存储层未命中。
处理方法一:缓存空对象,但是这样会占用较多的内存空间,所以根据自己的业务特点设置超时时间来控制内存使用问题。
处理方法2:布隆过滤器。
49.什么是缓存预热?
即系统上线后,将相关数据提前加载到缓存系统中,防止用户先查数据库再缓存。
50.什么是缓存雪崩? 解决问题?
缓存雪崩:由于缓存层承载大量请求,因此有效保护了存储层。 但如果存储层因为某种原因无法提供服务,存储层调用就会急剧增加,导致存储层宕机。
处理: