认识Redis
认识NoSQL
SQL(关系型数据库) NoSQL(非关系型数据库)
1.结构化 非结构化
2.关联的 非关联的
3.SQL查询 非SQL
4.事务 ACID BASE
认识Redis
Redis 是一个开源的、基于键值对的数据结构存储系统,被广泛应用于缓存、消息队列、分布式锁等多种场景。它支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等,还提供了持久化、事务、Lua脚本、Pub/Sub等高级功能。
特征
高性能:Redis使用内存存储数据,支持高读写速度,是许多高性能系统中不可或缺的组件。
数据结构丰富:除了基本的键值对,Redis提供了多种数据结构,便于开发者灵活选择最适合存储和操作数据的方式。
持久化:支持RDB(快照)和AOF(追加文件)两种持久化方式,确保数据不会因进程退出而丢失。
主从复制:支持数据复制,可以配置多个从节点,提高数据可用性和系统的扩展性。
集群:Redis Cluster提供了自动分片功能,可以将数据分布在多个节点上,实现水平扩展和故障转移。
发布/订阅(Pub/Sub):提供发布消息和订阅频道的能力,可以构建实时通知、聊天系统等。
基本命令
•设置值:SET key value
•获取值:GET key
•删除键:DEL key
•列表操作:LPUSH key value(左侧插入),RPUSH key value(右侧插入),LPOP key(左侧弹出),RPOP key(右侧弹出)
•集合操作:SADD key member(添加元素),SMEMBERS key(获取集合所有成员)
•有序集合操作:ZADD key score member(添加成员并指定分数),ZRANGE key start stop [WITHSCORES](按分数范围获取成员)
•哈希操作:HSET key field value(设置哈希表字段值),HGETALL key(获取哈希表所有字段和值)
Redis常见面试问题
使用场景
缓存三兄弟(穿透、击穿、雪崩)、双写一致、持久化、数据过期策略,数据淘汰策略
1. 高速缓存:Redis最广泛的应用之一是作为数据库查询结果的缓存,以减轻数据库压力,加速数据访问。它特别适合存储频繁访问但不经常变更的数据,如网页内容、用户会话信息等。
2. 会话管理:利用Redis的高速读写特性,可以将用户会话信息存储在内存中,实现会话的集中管理,支持高并发下的会话访问。
3. 消息队列与发布/订阅:Redis的发布/订阅模式(Pub/Sub)可以构建轻量级的消息系统,用于消息传递、实时通知、聊天应用等,支持一对多的消息广播。
4. 实时分析与计数器:Redis的原子操作和高性能特性使其非常适合实时数据分析和计数器应用,如网站访问计数、投票系统、实时统计等。
5. 排行榜系统:有序集合(Sorted Set)数据结构天然支持排序,非常适合构建各种排行榜系统,如游戏积分榜、评论热度排名等。
6. 分布式锁与同步:Redis的SETNX、GETSET等命令可以用来实现分布式锁,解决分布式系统中的并发控制问题,保障数据一致性。
7. 事务处理:虽然Redis的事务不支持回滚,但其提供了简单的事务管理能力,适用于需要一次性执行多个操作且这些操作需要原子性完成的场景。
8. 数据过期策略:Redis支持设置键的生存时间(TTL),可以自动删除过期数据,适用于实现限时优惠、会话超时等场景。
缓冲穿透
缓存穿透是指在使用缓存系统时,客户端请求的数据既不在缓存中也不在数据库中。这种情况通常发生在查询一个数据库中并不存在的数据时,缓存因为未命中而直接将请求转发到数据库,而数据库中也查不到这个数据,于是每次这样的请求都会穿透缓存直接打到数据库上,给数据库带来不必要的压力,同时也失去了缓存提高效率的意义。
解决方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存
解决方案二:布隆过滤器
bitmap(位图):相当于是一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或1
布隆过滤器作用:布隆过滤器可以用于检索一个元素是否在一个集合中。
存储数据:id为1的数据,通过多个hash函数获取hash值,根据hash计算数组对应位置改为1
查询数据:使用相同hash函数获取has