初识Redis

一、MySQL VS Redis

MySQL是一种关系型数据库管理系统(RDBMS),而Redis是一种内存数据存储系统,也被称为键值存储系统。它们之间存在以下几点区别:

1.数据存储方式:

  • MySQL使用磁盘作为数据的持久化存储介质,数据存储在硬盘上。
  • Redis将数据存储在内存中,通过快速的内存访问速度来提供高性能和低延迟的数据访问。

2.数据结构支持:

  • MySQL支持表结构,例如表格(表)、行(记录)和列(字段)。它可以存储结构化数据。
  • Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合。它可以存储非结构化数据,适用于缓存、队列等场景。

3.数据持久化:

  • MySQL通过持久化机制将数据保存在硬盘上,确保数据的长期存储和可靠性。
  • Redis提供了不同的持久化选项,包括快照(将内存数据以快照的形式写入磁盘)和日志(将写操作追加到日志文件中)。但是,Redis的持久化是可选的,可以根据需求进行配置。

4.数据库查询语言:

  • MySQL使用SQL(Structured Query Language)作为数据库查询语言,支持复杂的查询、连接和条件操作。
  • Redis提供了一组简单的键值操作命令,例如GET、SET、DEL等,没有像SQL那样的复杂查询语言。

5.数据库功能:

  • MySQL提供了丰富的数据库管理功能,如事务支持、ACID特性、索引、复制、备份恢复等。
  • Redis的功能相对较为简单,注重高性能和低延迟,提供了一些基本的数据操作和持久化选项。

在这里插入图片描述


根据应用的需求,选择适合的数据库系统是很重要的。如果需要处理复杂的关系数据,并且需要强大的查询功能和事务支持,MySQL是一个更好的选择。而如果需要高性能的缓存或快速的键值存储,Redis可以提供更好的性能和响应时间。有时候,MySQL和Redis也可以结合使用,以发挥各自的优势。


二、认识Redis

Redis诞生于2009年全称为 Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库

Redis特性

Redis之所以受到如此多公司的⻘睐,必然有之过⼈之处,下⾯是关于Redis的8个重要特性。

1.速度快

正常情况下,Redis执⾏命令的速度⾮常快,官⽅给出的数字是读写性能可以达到10万/秒,当然这也取决于机器的性能,但这⾥先不讨论机器性能上的差异,只分析⼀下是什么造就了Redis如此之快,可以⼤概归纳为以下四点:

  • Redis的所有数据都是存放在内存中的,把数据放在内存中是Redis速度快的最主要原因。
  • Redis是⽤C语⾔实现的,⼀般来说C语⾔实现的程序“距离”操作系统更近,执⾏速度相对会更快。
  • Redis使⽤了单线程,预防了多线程可能产⽣的竞争问题。
    Redis在6.0版本引⼊了多线程机制,但主要也是在处理⽹络和IO,不涉及到数据命令,即命令的执⾏仍然采⽤了单线程模式。
  • 作者对于Redis源代码可以说是精打细磨,曾经有⼈评价Redis是少有的集性能和优雅于⼀⾝的开源代码.

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

⼏乎所有的编程语⾔都提供了类似字典的功能,例如C++⾥的map、Java⾥的map、Python⾥的dict等,类似于这种组织数据的⽅式叫做基于键值对的⽅式,与很多键值对数据库不同的是,Redis中的值不仅可以是字符串,⽽且还可以是具体的数据结构,这样不仅能便于在许多应⽤场景的开发,同时也能提⾼开发效率。

  • Redis的全程是REmoteDictionaryServer,它主要提供了5种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(orderedset/zet),同时在字符串的基础之上演变出了位图(Bitmaps)和HyperLogLog两种神奇的”数据结构“,并且随着LBS(LocationBasedService,基于位置服务)的不断发展,Redis3.2.版本种加⼊有关GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种“有意思”的应⽤。

3.丰富的功能

除了5种数据结构,Redis还提供了许多额外的功能:

• 提供了键过期功能,可以⽤来实现缓存。
• 提供了发布订阅功能,可以⽤来实现消息系统。
• ⽀持Lua脚本功能,可以利⽤Lua创造出新的Redis命令。
• 提供了简单的事务功能,能在⼀定程度上保证事务特性。
• 提供了流⽔线(Pipeline)功能,这样客⼾端能将⼀批命令⼀次性传到Redis,减少了⽹络的开销。

4.简单稳定

Redis的简单主要表现在三个⽅⾯。

  • ⾸先,Redis的源码很少,早期版本的代码只有2万⾏左右,3.0版本以后由于添加了集群特性,代码增⾄5万⾏左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维⼈员完全可以“吃透”它。
  • 其次,Redis使⽤单线程模型,这样不仅使得Redis服务端处理模型变得简单,⽽且也使得客⼾端开发变得简单。
  • 最后,Redis不需要依赖于操作系统中的类库(例如Memcache需要依赖libevent这样的系统类库),Redis⾃⼰实现了事件处理的相关功能。

Redis具备相当的稳定性,在⼤量使⽤过程中,很少出现因为Redis⾃⾝BUG⽽导致宕掉的情况。

5.客⼾端语⾔多

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

6.持久化(Persistence)

通常看,将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢失,因此Redis提供了两种持久化⽅式:RDB和AOF,即可以⽤两种策略将内存的数据保存到硬盘中(如图所⽰),这样就保证了数据的可持久性,后续我们将对Redis的持久化进⾏详细说明。

在这里插入图片描述

7. 主从复制(Replication)

Redis提供了复制功能,实现了多个相同数据的Redis副本(Replica)(如图所⽰),复制功能是分布式Redis的基础。
在这里插入图片描述

8.⾼可⽤(HighAvailability)和分布式(Distributed)

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

Redis使用场景

Redis可以做什么

  1. 缓存(Cache)
    缓存机制⼏乎在所有⼤型⽹站都有使⽤,合理地使⽤缓存不仅可以加速数据的访问速度,⽽且能够有效地降低后端数据源的压⼒。Redis提供了键值过期时间设置,并且也提供了灵活控制最⼤内存和内存溢出后的淘汰策略。可以这么说,⼀个合理的缓存设计能够为⼀个⽹站的稳定保驾护航。

  2. 排⾏榜系统
    排⾏榜系统⼏乎存在于所有的⽹站,例如按照热度排名的排⾏榜,按照发布时间的排⾏榜,按照各种复杂维度计算出的排⾏榜,Redis提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统。

  3. 计数器应⽤
    计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的实时性,每⼀次播放和浏览都要做加1的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择。

  4. 社交⽹络
    赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交⽹站的必备功能,由于社交⽹站访问量通常⽐较⼤,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis提供的数据结构可以相对⽐较容易地实现这些功能。

  5. 消息队列系统
    消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是对于⼀般的消息队列功能基本可以满⾜。

Redis不可以做什么

实际上和任何⼀⻔技术⼀样,每个技术都有⾃⼰的应⽤场景和边界,也就是说Redis并不是万⾦油,有很多合适它解决的问题,但是也有很多不合适它解决的问题。我们可以站在数据规模和数据冷热的⻆度来进⾏分析。

站在数据规模的⻆度看,数据可以分为⼤规模数据和⼩规模数据,我们知道Redis的数据是存放在内存中的,虽然现在内存已经⾜够便宜,但是如果数据量⾮常⼤,例如每天有⼏亿的⽤⼾⾏为数据,使⽤Redis来存储的话,基本上是个⽆底洞,经济成本相当⾼。

站在数据冷热的⻆度,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据,例如对于视频⽹站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,⽽⽤⼾的观看记录不⼀定是经常需要访问的数据,这⾥暂且不讨论两者数据规模的差异,单纯站在数据冷热的⻆度上看,视频信息属于热数据,⽤⼾观看记录属于冷数据。如果将这些冷数据放在Redis上,基
本上是对于内存的⼀种浪费,但是对于⼀些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

…狂奔的蜗牛~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值