[Redis][Redis简介]详细讲解


1.认识 Redis

  • Redis是⼀种基于键值对(Key-Value)的NoSQL数据库
  • Redis会将所有数据都存放在内存中,所以它的读写性能⾮常惊⼈
  • 与很多键值对数据库不同的是,Redis 中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLogGEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满⾜很多的应⽤场景
  • Redis还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”

2.Redis 特性

1.速度快

  • Redis的所有数据都是存放在内存中的,比访问硬盘的数据库要快得多
    • MySQL主要是通过""的方式来存储组织数据的"关系型数据库"
    • Redis主要是通过"键值对"的方式来存储组织数据的"非关系型数据库"
  • Redis核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构
  • Redis使⽤了单线程,预防了多线程可能产⽣的竞争问题
    • Redis在6.0版本引⼊了多线程机制,但主要也是在处理⽹络和IO,不涉及到数据命令
    • 即命令的执⾏仍然采⽤了单线程模式
  • 从网络角度上,Redis使用了IO多路复用的方式(epoll)

2.基于键值对的数据结构的服务器

  • 与很多键值对数据库不同的是, Redis中的值(Value)不仅可以是字符串,⽽且还可以是具体的数据结构,这样不仅能便于在许多应⽤场景的开发,同时也能提⾼开发效率
  • Redis的全程是Remote Dictionary Server,它主要提供了5种数据结构:字符串(string)、哈希)、列表(list)、集合(set)、有序集合(orderedset/zset),同时在字符串的基础之上演变出了位图(Bitmaps)和HyperLogLog,并且随着LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2.版本种加⼊有关GEO(地理信息定位)的功能
  • 总结:Key都是stringValue可以是上述的这些数据结构

3.丰富的功能

  • 提供了键过期功能,可以⽤来实现缓存
  • 提供了发布订阅功能,可以⽤来实现消息系统
  • ⽀持Lua脚本功能,可以利⽤Lua创造出新的Redis命令
    • 针对Redis的操作,可以直接通过简单的交互式命令进行操作
    • 也可以通过脚本的方式,批量执行一些操作(带有逻辑)
  • 提供了简单的事务功能,能在⼀定程度上保证事务特性
  • 提供了流⽔线(Pipeline)功能,这样客⼾端能将⼀批命令⼀次性传到Redis,减少了⽹络的开销

4.简单稳定

  • Redis的源码很少,早期版本的代码只有2万⾏左右, 3.0版本以后由于添加了集群特性,代码增⾄5万⾏左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维⼈员完全可以“吃透”它
  • Redis使⽤单线程模型, 这样不仅使得Redis服务端处理模型变得简单,⽽且也使得客⼾端开发变得简单
  • Redis不需要依赖于操作系统中的类库,Redis⾃⼰实现了事件处理的相关功能
  • 与简单相对的是Redis具备相当的稳定性,在⼤量使⽤过程中,很少出现因为Redis⾃⾝BUG⽽导致宕掉的情况

5.客户端语言多

  • Redis提供了简单的TCP通信协议,很多编程语⾔可以很⽅便地接⼊到Redis,并且由于Redis受到社区和各⼤公司的⼴泛认可,所以⽀持Redis的客⼾端语⾔也⾮常多,⼏乎涵盖了主流的编程语⾔,例如:C、C++、Java、PHP、Python、NodeJS等

6.高扩展性

  • 可用C、C++、Rust编写Redis拓展 --> 本质上是动态链接库
  • 自己扩展Redis功能,可以让其支持更多的数据结构以及更多的明林

7.持久化(Persistence)

  • 将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢失

  • Redis提供了两种持久化⽅式:RDB和AOF,可以⽤两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性
    请添加图片描述

  • 内存为主,硬盘为辅,硬盘相当于对内存的数据备份了一下


8.主从复制

  • Redis提供了复制功能,实现了多个相同数据的Redis副本(Replica)
    • 复制功能是分布式Redis的基础
      请添加图片描述

9.⾼可⽤和分布式

  • Redis提供了⾼可⽤实现的Redis哨兵(Redis Sentinel),能够保证Redis结点的故障发现和故障⾃动转移
  • 也提供了Redis集群(Redis Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性

3.Redis 使用场景

1.数据库

  • 大多数情况下,考虑到数据存储,优先考虑的是"大"
  • 但也有少数情况,考虑的是"快"
  • 因为Redis将数据存储在内存中,所以Redis作为数据库是非常快的

2.Cache

  • 二八原则,把热点数据拎出来,存储在Redis中
    • Redis存的是部分数据,全量数据以MySQL为主
  • 缓存机制⼏乎在所有⼤型⽹站都有使⽤,合理地使⽤缓存不仅可以加速数据的访问速度,⽽且能 够有效地降低后端数据源的压⼒
  • Redis提供了键值过期时间设置,并且也提供了灵活控制最⼤内存和内存溢出后的淘汰策略

3.消息队列

  • 消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性
  • Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是 对于⼀般的消息队列功能基本可以满⾜
  • 如果当前场景中,对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖了,Redis可以考虑作为一个选择

4.注意

  • Redis的字符串,不会对字符串编码做任何处理
    • Redis不认识字符,只认识字节
  • 在启动Redis客户端的时候,加上一个--raw选项,就可以使Redis客户端能够自动的把二进制数据尝试翻译
Redis消息队列是一种基于内存的队列,用于在应用程序之间或不同服务之间传输消息。Redis作为一个高性能的内存数据库,可以快速地将消息存储在内存中,并提供了一系列的指令来操作这些消息。在Redis中,消息队列通常使用List数据结构来实现。 以下是Redis消息队列的详细讲解: 1. Redis List数据结构 Redis的List是一个双向链表,可以在列表的两端进行插入和删除操作。在Redis中,List可以用于实现队列、栈等数据结构。List中的每个元素都是一个字符串。 2. Redis消息队列的实现 Redis消息队列的实现通常使用List数据结构,其中List的头部作为队列的入口,尾部作为队列的出口。当有新的消息进入队列时,使用LPUSH指令将消息插入到List的头部,当有消费者需要消费消息时,使用RPOP指令从List的尾部弹出一条消息。 3. 消息队列的生产者和消费者 Redis消息队列有生产者和消费者两个角色。生产者负责向队列中添加消息,消费者则负责从队列中取出消息进行处理。由于Redis是一个高性能的内存数据库,可以快速地将消息存储在内存中,并提供了一系列的指令来操作这些消息,因此Redis消息队列可以高效地实现生产者和消费者之间的消息传递。 4. 消息队列的应用场景 Redis消息队列可以应用于很多场景,比如异步任务处理、实时消息推送、日志处理等。在异步任务处理中,可以将需要异步处理的任务放入队列中,由消费者从队列中取出任务进行处理,从而提高任务处理的效率。在实时消息推送中,可以使用Redis消息队列来实现消息的分发,从而提高消息的实时性和可靠性。在日志处理中,可以将日志信息放入队列中,由消费者从队列中取出日志信息进行处理,从而实现日志的实时处理和分析。 总之,Redis消息队列是一种高效、可靠的消息传递机制,可以应用于各种场景中,是构建分布式系统的重要组件之一。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DieSnowK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值