什么是Redis
Redis是一个开源的、高性能的、基于内存的、支持多种数据结构的键值型数据库。它可以将内存中的数据持久化到磁盘,支持主从复制和事务,提供多种语言的API。
为什么需要Redis
Redis是一个非常有用的工具,它的特点是速度快、数据丰富、操作原子、特性多,它可以为很多应用场景提供高效的解决方案。
Redis的基本工作原理
Redis 的工作原理是将数据存储在内存中,提供高速读写能力,支持多种数据结构和持久化机制,适用于多种应用场景,如缓存、会话存储、实时分析等。
Redis应用案例
Redis实际应用场景
- Redis可以作为分布式会话,利用哈希数据类型,存储用户的会话信息。这样,当用户在不同的服务器上访问时,都能获取到相同的会话状态。
- Redis可以作为分布式锁,利用setnx命令,实现互斥性的获取锁操作。这样,当多个服务器对同一个资源进行并发访问时,可以避免数据的冲突或丢失。例如,全局ID生成器、减库存操作、秒杀活动等
- Redis可以作为消息系统,利用发布/订阅功能或阻塞队列功能,实现消息的发送和接收。例如,业务解耦、流量削峰、异步处理等场景。
Redis常用数据结构
字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)等
Redis使用注意事项
大key,热key
大key的标准:
1.String类型,value的字节数大于10KB即为大key
2.Hash/Set/Zset/list等复杂数据结构类型,元素个数大于5000个或总value字节数大于10MB即为大key
大Key的危害:
读取成本高
容易导致慢查询(过期、删除)
主从复制异常,服务阻塞无法正常响应请求
消除大Key的方法:
1.拆分: 将大key拆分为小key。例如一个String拆分成多个String
2.压缩: 将value压缩后写入redis,读取时解压后再使用。压缩算法可以是gzip、snappy、Iz4等。通常情况下一个压缩算法压缩率高、则解压耗时就长。需要对实际数据进行测试后,选择一个合适的算法。如果存储的是JSON字符串,可以考虑使用MessagePack进行序列化。
3 .集合类结构hash、list、set、set
(1) 拆分:可以用hash取余、位掩码的方式决定放在哪个key中
(2) 区分冷热:如榜单列表场景使用zset,只缓存前10页数据,后续数据走db
热Key的定义:
用户访问一个Key的QPS特别高,导致Server实例出现CPU负载突增或者不均的情况热key没有明确的标准,QPS 超过500就有可能被识别为热Key
解决热Key的方法:
设置Localcache
在访问Redis前,在业务服务侧设置Localcache,降低访问Redis的QPS。LocalCache中缓存过期或未命中则从Redis中将数据更新到LocalCache。 Java的Guava、Golang的Bigcache就是这类LocalCache
小结
首次接触到了Redis,浅浅总结一下。