目录
基本概念
string
基本的数据类型,存储任何类型数据包括图片,序列化对象等等,一个键最大存512MB
hash
键值对集合,string的field和value的映射表
list
字符串列表,可以头或者尾插入元素
set
string类型的无序集合,哈希表实现,O(1)
zset
类似于set,每个元素关联double类型分数,用于从小到大排序元素,成员唯一,分数可重复。
常见问题及解决
缓存穿透
缓存和数据库都没有数据,用户频繁发起请求导致数据库压力过大
解决:布隆过滤器提前过滤不存在的数据,或者对查询不存在的数据统一返回处理
缓存击穿
缓存无,数据库有数据(缓存到期)的时候,并发请求数据库查询同一数据,数据库压力过大
解决:加锁机制,延时双删策略
缓存雪崩
缓存大量数据同时过期,查询数据量巨大,数据库压力过大。
解决:优化缓存过期时间,使其分布更均匀,或者使用缓存预热机制提前加载热点数据
Redis内存管理策略
noeviction
不驱逐任何键,新写入操作就报错
allkeys-lru
移除最近少使用的键
allkeys-random
碎金移除某个键
volatile-random
设置过期时间的键中,随机删除某个键
volatile-ttl
设置过期时间的键中,先删最早过期的
Redis持久化机制
RDB快照
指定时间拍内存数据快照,保存在dump.rdb中
重启时,载入RDB文件还原数据库状态
缺点:有丢失RDB进而丢失数据的风险
AOF追加文件
每次redis执行改变数据库的命令时,该命令都会被追加到AOF文件末尾
重启时,redis通过重新执行AOF文件中的命令来重构数据集
更耐久的机制
Redis多线程特性
redis执行命令是单线程的,多线程主要用于处理网络数据的读写的协议解析,以优化整体性能。
优点:保证了数据处理的一致性,提高了系统的吞吐量和相应速度。
Redis应用场景
缓存
大幅减轻数据库压力,提高相应速度
消息队列
list数据结构实现了简单的消息队列,进行任务的异步处理
分布式锁
结合redis命令特性和事务,实现分布式环境下的锁机制,确保数据一致性
排行榜
利用Zset能够实现各类排行榜的功能(商品销量榜,游戏排行榜等等)
实时系统
由于高并发和低延迟的特性,redis可用于实时数据分析,展示系统中。