redis知识点整理

本文详细介绍了Redis的核心特性,包括单线程设计原因、数据持久化(RDB和AOF)、主从复制、消息队列实现、常用数据结构及其底层实现,以及在缓存、数据库、消息队列等场景的应用。还提醒了在设置大量key过期时间和分布式锁时的注意事项。
摘要由CSDN通过智能技术生成

redis是一个可基于内存可持久化的日志型,key-value数据库,提供多种语言的API,是单线程的,为什么redis是单线程的,本文主要以java为例。

redis的特性包括:数据访问速度快(存在内存中),有数据持久化机制,支持集群模式(容量可以线性扩展),支持丰富的数据结构,可以按Key设置过期时间,过期自动删除,支持事务。

redis缺点:数据库容量受物理内存的限制,不能用作海量数据的高性能读写,场景主要局限在较小数据量的高性能操作和运算上。

Redis管道

一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。

使用管道发送命令时,服务器将被迫回复一个队列答复,占用很多内存。所以,如果你需要发送大量的命令,最好是把他们按照合理数量分批次的处理,例如10K的命令,读回复,然后再发送另一个10k的命令,等等。这样速度几乎是相同的,但是在回复这10k命令队列需要非常大量的内存用来组织返回数据内容。

分布式

redis支持主从的模式。原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。

这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave提供检索服务。这样可以有效减少单个机器的并发访问数量。

通过增加Slave DB的数量,读的性能可以线性增长。为了避免Master DB的单点故障,集群一般都会采用两台Master DB做双机热备,所以整个集群的读和写的可用性都非常高。
读写分离架构的缺陷在于,不管是Master还是Slave,每个节点都必须保存完整的数据,如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力,而且对于Write-intensive类型的应用,读写分离架构并不适合。

为了解决读写分离模型的缺陷,可以将数据分片模型应用进来。

可以将每个节点看成都是独立的master,然后通过业务实现数据分片。

结合上面两种模型,可以将每个master设计成由一个master和多个slave组成的模型。

主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

消息队列

一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。 
 list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。 
 使用pub/sub主题订阅者模式,可以实现1:N的消息队列。 
 在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。 
 redis如何实现延时队列?使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理

Redis其实只适合作为缓存,而不是数据库或是存储。它的持久化方式适用于救救

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值