A. 请简述 Redis 和 MySQL 功能上的区别(⭐⭐⭐)
- MySQL 主要用于持久化地将数据存储到硬盘,功能强大,但是读取速度较慢,资源消耗较大。
- Redis 将使用频繁的数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是一般在使用中,Redis 缓存的数据保存时间是有限的。
A. redis 的优缺点(⭐⭐⭐)
Redis 本质上是一个 Key-Value 类型的内存数据库,定期把数据库中的数据 flush 到硬盘上进行保存。因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value 数据库。
- 优点:
- 读写性能极高, Redis 能读的速度是 110000次/s,写的速度是 81000次/s。
- 支持数据持久化,支持 AOF 和 RDB 两种持久化方式。
- 支持事务, Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。
- 数据结构丰富,除了支持 string 类型的 value 外,还支持 hash、set、zset、list 等数据结构。
- 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
- 缺点:
- 数据库容量受到物理内存的限制,Redis 只适合在较小数据量的高性能操作和运算上。
- 主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP 后还会引入数据不一致的问题,降低了系统的可用性。
A. redis 有哪几种数据结构?(⭐⭐⭐)
五种常用数据类型:String、List、Hash、List、Set、zSet。
- 字符串(string):存储任意类型的数据,适用于缓存等场景。
- 列表(list):存储一组字符串数据,可以作为队列或栈使用。
- 哈希(hash):存储多个字段的字符串数据,适用于存储用户信息、商品信息等场景。
- 集合(set):存储一组不重复的字符串数据,支持集合运算,适用于粉丝关系等场景。
- 有序集合(sorted set):在集合的基础上,每个元素都有一个分数(score),可以排序和范围查询,适用于排行榜等场景。
三种特殊的数据类型:Bitmap、HyperLogLog、Geospatial ,其中HyperLogLog、Bitmap的底层都是 String 数据类型,Geospatial 的底层是 Sorted Set 数据类型。
- Bitmap适用于存储二进制位数据,常见用途是用于统计网站的日活、月活等数据。
- HyperLogLog是一种不精确的去重计数,适用于存储网页浏览量。
- Geospatial适用于存储地理位置信息,可以进行地理位置搜索、附近的人等功能。