说说你对Redis的了解?
- Redis是基于C语言编写的,开源的高性能非关系型的键值对数据库
- Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作
- Redis 也可以用来做分布式锁,也可以来设计消息队列,同时还支持事务 、持久化、Lua 脚本、多种集群方案
1、为什么要用Redis/为什么要用缓存
高性能
- 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的
- 将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了
- 操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可
高并发
- 直接操作缓存能够承受的请求是远远大于直接访问数据库的
- 所以我们可以把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库
2、Redis有哪些数据类型,常用于哪些方面
-
四种基本数据结构:String、 List、Set、Zset和Hash,三种特殊数据类型:位图(bitmaps) 、计数器(hyperloglogs)和地理空间(geospatial indexes)
String:一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
List:发布与订阅或者说消息队列、慢查询。
Hash:系统中对象数据的存储。
Set:需要存放的数据不能重复以及需要获取多个数据源交集和并集等场景
Zset:需要对数据根据某个权重进行排序的场景。比如在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息。
-
电商类应用,商品分类,商品列表等适合缓存并加一个失效时间(根据数据更新频率来定)
-
题库分类、题库列表放到缓存中并且加一个失效时间
3、Redis的持久化机制
- Redis的持久化就是把内存的数据写到磁盘里,防止服务器宕机
- Redis 提供两种持久化机制 RDB(默认)快照方式 和AOF追加方式
- RDB(Redis DataBase):通过创建快照来获取存储在内存里面的数据在某个时间点上的副本。在创建快照之后,用户可以对快照进行备份,可以将快照复制到其他服务器从而创建相同数据的服务器副本。(如果系统真的发生崩溃,用户将丢失最近一次生成快照之后更改的所有数据。)
- AOF持久化(Append Only File持久化):将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据
- 优缺点是什么?
AOF文件比RDB更新频率高,优先使用AOF还原数据。
AOF比RDB更安全也更大
RDB性能比AOF好
如果两个都配了优先加载AOF