理解
-
基于key-value存储结构的Nosql开源内存数据库。
-
提供了五种常用的数据类型:Strings ,Lists , Sets , SortSets ,Map,针对不同的结构可以解决不同的业务场景问题,像排行榜、文章的点赞收藏、热点话题等。
-
Redis里的数据基于内存存储,在数据结构上做了大量的优化,所以IO性能比较好,在实际开发中,我们会把它用在应用和数据库之间的分布式缓存中间件中。
-
非关系型,所以没有表关联之间的查询问题,能够很好的去提升应用程序之间的数据IO效率
-
对企业级开发来说,提供主从复制+哨兵以及集群的方式去实现高可用。
-
Redis集群里通过Hash槽的方式去实现数据的分片,进一步提升了整体的一个性能和可扩展性。
支持的数据类型
Redis总共有10种数据类型:Strings、Lists、Sets、Hashes、Sorted sets、Streams、Geospatial、Bitmaps、Bitfields、HyperLogLog。
持久化策略
-
RDB(RedisDatabase)是默认开启的,在指定的时间内如果有对应条数的数据发生变化,会自动将数据持久化到磁盘中,RDB存储的是数据,恢复数据的时候直接从磁盘中加载数据,所以它的一个数据恢复的性能比AOF好,可以用于数据缓存。
-
AOF(Append Only File)是需要手动开启的,为了弥补了RDB的不足,默认是每秒将操作异步记录到磁盘中,存储的是操作,通过重放操作的方式恢复数据,一般当作数据库来使用时开启AOF。
主从集群
-
Redis主从集群:一个Master节点和多个Slave节点,Master主要负责数据读写,Slave主要负责数据读取,Master收到数据变更会同步到Slave节点上去实现一个数据同步,通过这样的一个架构实现Redis的读写分离,提升数据的查询效率。(不提供容错和恢复功能---> 推出哨兵模式[不能在线扩容]--->Redis Cluster)
-
主从复制:Master节点和Slave节点数据同步的一种机制,就是将主服务器的数据复制到从服务器中。
全量复制:发生在Slave节点初始化阶段,将Master数据全部拷贝一份,原理:Slave向Maste发送一个SYN的同步命令,Master收到数据后生成当前的数据快照发送给从节点 ,从节点收到数据加载后完成全量复制。
增量复制:发生在每一次Master节点发生数据变更的场景里,把变化的增量数据同步给从节点,增量复制是通过维护offset这样一个复制偏移量来实现的。
-
Redis Cluster
Redis Cluster自动将数据进行分片,同时每个 master 只有一部分数据。提供内置的高可用支持,部分 master 不可用时还是可以对外提供服务的。在 Redis Cluster 架构下,每个 Redis 需要开发两个端口,比如一个是:6379 一个是 16379;另外一个就是加 1w 的端口号,比如 16379。端口号用来进行节点之间的通信,也被称为 cluster bus。cluster bus 的通信用来故障检测、配置更新、故障转移授权。cluster bus 用了另外一种二进制协议,gossip 协议,用于节点间进行高效的数据交换,占用较少的网络带宽和处理时间。
淘汰策略(八种五类)
Maxmemory达到最大限制(一般是服务器的最大内存)采取的缓存数据淘汰策略。
-
默认策略,直接报错
-
LRU策略,淘汰最近不经常使用的key
-
LFU策略,淘汰使用频率低的非热点数据
-
随机策略,随机淘汰一些key
-
TTL策略,设置过期时间的key里淘汰一些快过期的key
1、no-eviction: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就返回error,然后啥也不干。 2、allkeys-lru:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,淘汰一些最近未使用的key。 3、volatile-lru:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置里过期时间的key,淘汰一些最近未使用的key。 4、allkeys-random:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,随机淘汰一些key。 5、volatile-random:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置里过期时间的key,随机淘汰一些key。 6、volatile-ttl(time to live):添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置里过期时间的key,淘汰一些即将过期的key。 7、volatile-lfu:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会淘汰一些设置了过期时间的,使用LFU算法淘汰一些key。(有些key虽然最近没有被使用,在接下来可能会被使用,就不会删除) 8、allkeys-lfu:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,使用 LFU这种算法淘汰一些key。(有些key虽然最近没有被使用,在接下来可能会被使用,就不会删除) - LRU: Least Recently Used,淘汰最长时间未被使用的数据,以时间作为参考。 - LFU: Least Frequently Used(访问频率),淘汰一定时期内被访问次数最少的数据,以次数作为参考。
Redis是一种基于内存的NoSQL数据库,提供多种数据类型如Strings、Lists和Sets等,常用于缓存和高性能场景。它支持RDB和AOF两种持久化方式,以及主从复制和RedisCluster集群方案实现高可用。在内存限制时,有多种淘汰策略,如LRU和LFU,确保高效使用内存。
6万+

被折叠的 条评论
为什么被折叠?



