redis面试题

1.redis有哪些优点
(1) 速度快,因为数据存在内存中。
(2) 支持丰富数据类型,支持string,list,set,hash等
(3) 支持事务,操作都是原子性,就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis相比memcached有哪些优势
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis可以持久化其数据
redis常见性能问题和解决方案
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用树状结构,用单向链表结构更为稳定,即:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)...
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
redis集群的工作原理
主多从+哨兵模式

2.了解:

redis–快照

快照,主要涉及的是redis的RDB持久化相关的配置

用如下的指令来让数据保存到磁盘上,即控制RDB快照功能:

save <seconds> <changes>

举例
save 900 1 //表示每15分钟且至少有1个key改变,就触发一次持久化
save 300 10 //表示每5分钟且至少有10个key改变,就触发一次持久化
save 60 10000 //表示每60秒至少有10000个key改变,就触发一次持久化

如果想禁用RDB持久化的策略,只要不设置任何save指令就可以,或者给save传入一个空字符串参数也可以达到相同效果,就像这样:

save ""

3.安全:为redis加密:

可以要求redis客户端在向redis-server发送请求之前,先进行密码验证。当你的redis-server处于一个不太可信的网络环境中时,相信你会用上这个功能。由于redis性能非常高,所以每秒钟可以完成多达15万次的密码尝试,所以你最好设置一个足够复杂的密码,否则很容易被黑客破解。

requirepass 1122334

这里我们通过requirepass将密码设置成“1122334”。
### 常见的 Redis 面试题及其解答 #### 1. Redis 的核心特性是什么? Redis 是一种高性能的键值存储系统,支持多种数据结构,如字符串、哈希、列表、集合和有序集合。其核心特性包括内存中的数据存储能力以及持久化选项的支持[^2]。此外,Redis 使用 I/O 多路复用机制来实现高效的并发处理,从而能够同时响应大量的客户端请求[^1]。 #### 2. Redis 支持哪些数据结构?每种数据结构适用场景如何? Redis 提供了五种主要的数据结构: - **字符串 (String)**:适用于简单的键值对存储,也可以用于计数器功能。 - **哈希 (Hash)**:适合存储对象属性,例如用户的个人信息。 - **列表 (List)**:常用于消息队列或者最近浏览记录等功能。 - **集合 (Set)**:可以用来去重,比如统计唯一访客数量。 - **有序集合 (Sorted Set)**:除了具备集合的功能外,还提供了按分数排序的能力,可用于排行榜等应用。 #### 3. 如何解决 Redis 缓存穿透问题? 缓存穿透是指查询一个既不存在于数据库也不存在于缓存中的 key。为了防止这种情况的发生,可以通过以下方法解决: - 设置空结果的缓存,默认过期时间为较短的时间间隔。 - 对热点 key 进行布隆过滤器预判是否存在再尝试访问缓存或数据库。 #### 4. Redis 中的 AOF 和 RDB 各有什么优缺点? RDB(快照方式)通过定期保存整个数据集到磁盘上完成持久化;而 AOF 则是以日志的形式记录服务器执行的所有写操作指令并追加至文件末尾。两者各有特点: - **RDB**优点在于恢复速度较快,但可能丢失最后一次备份之后的数据变化; - **AOF**则能提供更高的数据安全性,但由于不断增长的日志体积可能导致性能下降。 #### 5. Redis Cluster 工作原理是什么样的? Redis Cluster 实现了一个分布式的解决方案,其中每个节点只负责一部分 keyspace 而不是全部。当 client 发送 request 给任意 node 时,如果该 node 不属于目标 slot,则会返回 MOVED redirect 把 connection 引导到正确的 place。 ```python import rediscluster rc = rediscluster.RedisCluster(startup_nodes=[{"host": "192.168.0.1", "port": "7000"}]) print(rc.get('foo')) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值