“FAQ:Redis”的版本间差异

来自Wikioe
跳到导航 跳到搜索
第37行: 第37行:
== 数据类型 ==
== 数据类型 ==
=== Redis 的数据类型有哪些? ===
=== Redis 的数据类型有哪些? ===
一般文章都是以Redis只有 5 种数据类型,还有 Bitmaps、HyperLogLogs、Streams 等。
中文官网上的解释:
:[[File:Redis 支持哪些数据类型.jpg|500px]]


=== 一个字符串类型的值能存储最大容量是多少? ===
=== 一个字符串类型的值能存储最大容量是多少? ===

2021年5月11日 (二) 19:02的版本


关于

关于 Redis 的常见问题、面试问题。

概念

什么是Redis?

Redis 全称为:Remote Dictionary Server(远程数据服务),是一个基于内存且支持持久化的高性能 key-value 数据库。具备一下三个基本特征:

  • 多数据类型
  • 持久化机制
  • 主从同步

Redis 有什么优点和缺点?

优点:

  • 读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。
  • 支持数据持久化,支持AOF和RDB两种持久化方式。
  • 支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
  • 数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
  • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

缺点:

  • 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。
  • Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。【???】
  • 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
  • Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

Redis 和 Memcached 的区别有哪些?

从以下8个方面来讲:

  1. Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 Memcache 还可用于缓存其他东西,例如图片、视频等等。
  2. Memcache 仅支持key-value结构的数据类型,Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,hash等数据结构的存储。
  3. 虚拟内存– Redis 当物理内存用完时,可以将一些很久没用到的value 交换到磁盘分布式–设定 Memcache 集群,利用 magent 做一主多从; Redis 可以做一主多从。都可以一主一从
  4. 存储数据安全– Memcache 挂掉后,数据没了; Redis 可以定期保存到磁盘(持久化)
  5. Memcache 的单个value最大 1m,Redis 的单个value最大 512m。
  6. 灾难恢复– Memcache 挂掉后,数据不可恢复; Redis 数据丢失后可以通过 aof 恢复
  7. Redis 原生就支持集群模式, Redis3.0 版本中,官方便能支持Cluster模式了, Memcached 没有原生的集群模式,需要依赖客户端来实现,然后往集群中分片写入数据。
  8. Memcached 网络IO模型是多线程,非阻塞IO复用的网络模型,原型上接近于 nignx。而 Redis使用单线程的IO复用模型,自己封装了一个简单的 AeEvent 事件处理框架,主要实现类epoll,kqueue 和 select,更接近于Apache早期的模式。

数据类型

Redis 的数据类型有哪些?

一般文章都是以Redis只有 5 种数据类型,还有 Bitmaps、HyperLogLogs、Streams 等。

中文官网上的解释:

Redis 支持哪些数据类型.jpg

一个字符串类型的值能存储最大容量是多少?

单线程

Redis 是单线程的吗?

Redis 为什么设计成单线程的?

请说说 Redis 的线程模型?

为什么 Redis 单线程模型也能效率这么高?

Redis 是单线程的,如何提高多核 CPU 的利用率?

事务

什么是 Redis 事务?

Redis 事务的注意点有哪些?

为什么Redis 事务不支持回滚?

持久化

Redis 有几种持久化方式?

说说 RDB 的优缺点

说说 AOF 的优缺点

两种持久化方式该如何选择?

面试官追问那如果突然机器掉电会怎样?

面试官追问 bgsave 的原理是什么?

Redis 的同步机制了解是什么?

什么是 Redis Pipelining?

内存回收与key失效机制

Redis 有几种数据“过期”策略?

Redis 有哪几种数据“淘汰”策略?

集群

什么是 Redis 主从同步?

如何使用 Redis Sentinel 实现高可用?

如果使用 Redis Cluster 实现高可用?

Redis Cluster 的主从复制模型是怎样的?

Redis 的哨兵有什么功能?

Redis 哨兵和集群的区别是什么?

说说 Redis 哈希槽的概念?

部署、优化

请说说你们生产环境中的 Redis 是怎么部署的?

你知道有哪些 Redis 分区实现方案?

熟悉 Redis 的哪些客户端?

优化

缓存命中率表示什么?

如何提高 Redis 命中率?

假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?

怎么优化 Redis 的内存占用?

什么是缓存穿透?怎么解决?

什么是缓存雪崩? 怎么解决?

对 Redis 进行性能优化,有些什么建议?

应用

Redis有哪些使用场景?

如何使用 Redis 实现分布式锁?

分布式锁的实现条件?

Redis 和 Zookeeper 实现的分布式锁有什么区别,哪个更好的呢?

如何使用 Redis 实现分布式限流?

如何使用 Redis 实现消息队列?

Redis 高可用方案有哪些?