基础
1、Redis是什么?简述它的优缺点?
Redis是用 C 语言开发的一个开源的高性能键值对(key-value)内存数据库。经常被用来做缓存,消息队列,分布式锁。
Redis 提供了多种数据类型来支持不同的业务场景,如 字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)与范围查询。
Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。
优点:
- 读写性能极高, Redis能读的速度是110000次/s,写的速度是81000次/s。
- 支持数据持久化,支持AOF和RDB两种持久化方式。
- 支持事务, Redis的所有操作都是原子性的
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等特性。
- 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
- 丰富的数据类型 – Redis支持 Strings、Lists、 Hashes、Sets 、Sorted Sets 等数据类型操作。
缺点:
- 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
- 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
2、为什么要用 Redis 做缓存?
从高并发上来说:
- 直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。
从高性能上来说:
- 用户第一次访问数据库中的某些数据。 因为是从硬盘上读取的所以这个过程会比较慢。将该用户访问的数据存在缓存中,下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据。
3、Redis应用场景有哪些?
- 缓存热点数据,缓解数据库的压力。
- 利用Redis 原子性的自增操作,可以实现计数器的功能,比如统计用户点赞数、用户访问数等。
- 简单的消息队列,可以使用Redis自身的发布订阅模式或者List来实现简单的消息队列,实现异步操作。
- 限速器,可用于限制某个用户访问某个接口的频率,比如秒杀场景用于防止用户快速点击带来不必要的压力。
- 好友关系,利用集合的一些命令,比如交集、并集、差集等,实现共同好友、共同爱好之类的功能。
4、Memcached和Redis的区别?
- Redis 只使用单核,而 Memcached 可以使用多核。
- MemCached 数据结构单一,仅用来缓存数据,而 Redis 支持多种数据类型。
- MemCached 不支持数据持久化,重启后数据会消失。Redis 支持数据持久化。
- Redis 提供主从同步机制和 cluster 集群部署能力,能够提供高可用服务。Memcached 没有提供原生的集群模式,需要依靠客户端实现往集群中分片写入数据。
- Redis 的速度比 Memcached 快很多。
- Redis 使用单线程的多路 IO 复用模型,Memcached使用多线程的非阻塞 IO 模型。
5、MySQL和Redis的区别有哪些?
- 数据存储类型:MySQL是关系型数据库,适用于存储结构化数据,如表格,列和关系,而Redis是非关系型数据库,适用于存储键值对数据。
- 性能:Redis的读写性能要比MySQL高得多,因为Redis的数据存储在内存中,而MySQL的数据存储在磁盘上,这会导致读写延迟。
- 持久化:Redis支持数据持久化,可以将内存中的数据写入磁盘以防止数据丢失。MySQL的数据是默认持久化的。
- 事务支持:MySQL支持完整的事务处理功能,包括原子性、一致性、隔离性和持久性。Redis支持简单的事务处理功能,通过MULTI、EXEC、DISCARD和WATCH等命令实现。但是,与MySQL相比,Redis的事务功能较弱,适用于简单的原子操作。
- 使用场景:MySQL适用于复杂的数据存储和查询,而Redis适用于高速缓存,数据存储和查询速度要求较高的场景。