Redis

Redis是一种基于内存的NoSQL数据库,提供多种数据类型如Strings、Lists和Sets等,常用于缓存和高性能场景。它支持RDB和AOF两种持久化方式,以及主从复制和RedisCluster集群方案实现高可用。在内存限制时,有多种淘汰策略,如LRU和LFU,确保高效使用内存。

理解

  • 基于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达到最大限制(一般是服务器的最大内存)采取的缓存数据淘汰策略。

  1. 默认策略,直接报错

  2. LRU策略,淘汰最近不经常使用的key

  3. LFU策略,淘汰使用频率低的非热点数据

  4. 随机策略,随机淘汰一些key

  5. 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(访问频率),淘汰一定时期内被访问次数最少的数据,以次数作为参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值