【Redis】 初识 Redis

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis】 初识 Redis

🍃前言

本篇文章,将从以下几个方面带你走进 Redis的世界,

  • Redis是什么?
  • Redis为什么好?
  • Redis有那些特性?
  • Redis有那些使用场景?

🌲何为Redis?

Redis 是⼀种基于键值对(key-value)的== NoSQL 数据库==,与很多键值对数据库不同的是,Redis 中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis 可以满⾜很多的应⽤场景,⽽且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。

不仅如此,Redis 还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”。

除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流⽔线、Lua脚本等附加功能。

总之,如果在合适的场景使⽤号Redis,它就会像⼀把大砍刀⼀样所向披靡。

🎄Redis的由来与影响力

2008 年,Redis的作者Salvatore Sanfilippo在开发⼀个叫 LLOOGG 的⽹站时,需要实现⼀个⾼性能的队列功能,最开始是使⽤ MySQL 来实现的,但后来发现⽆论怎么优化 SQL 语句等都不能使⽹站的性能提⾼上去,再加上⾃⼰囊中羞涩,于是他决定⾃⼰做⼀个专属于 LLOOGG 的数据库,这个就是 Redis 的前⾝。

后来,Salvatore Sanfilippo 将 Redis 1.0 的源码发布到 Github 上,可能连他⾃⼰都没想到,Redis 后来如此受欢迎。

假如现在有⼈问 Redis 的作者都有谁在使⽤ Redis,我想他可以开句玩笑的答:“还有谁不使⽤ Redis”

当然这只是开玩笑,但是从 Redis 的官⽅公司统计来看,有很多重量级的公司都在使⽤ Redis,如国外的 Twitter、Instagram、Stack Overflow、Github 等,国内就更多了,如果单单从体量来统计,新浪微博可以说是全球最⼤的 Redis 使⽤者,除了新浪微博,还有像阿⾥巴巴、腾讯、搜狐、优酷土豆、美团、⼩⽶、唯品会等公司都是 Redis 的使⽤者。

除此之外,许多开源技术像 ELK 等,已经把 Redis 作为它们组件中的重要⼀环,⽽且 Redis 还提供了模块系统让第三⽅⼈员实现功能扩展,让 Redis 发挥出更⼤的威⼒。

所以,可以这么说,熟练使⽤和运维 Redis 已经成为开发运维⼈员的⼀个必备技能。

🎍Redis 特性

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

🚩速度快

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

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

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

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

Redis 的全程是 REmote Dictionary Server,它主要提供了 5 种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(orderedset/

zet),同时在字符串的基础之上演变出了位图(Bitmaps)和 HyperLogLog 两种神奇的”数据结构“,并且随着 LBS(Location Based Service,基于位置服务)的不断发展,Redis 3.2. 版本种加⼊有关 GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种 “有意思” 的应⽤。

🚩丰富的功能

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

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

🚩简单稳定

Redis的简单主要表现在三个⽅⾯。⾸先,Redis的源码很少,早期版本的代码只有2万⾏左右,3.0版本以后由于添加了集群特性,代码增⾄ 5 万⾏左右,相对于很多 NoSQL 数据库来说代码量相对要少很多,也就意味着普通的开发和运维⼈员完全可以 “吃透” 它。

其次,Redis 使⽤单线程模型,这样不仅使得 Redis 服务端处理模型变得简单,⽽且也使得客⼾端开发变得简单。最后,Redis不需要依赖于操作系统中的类库(例如 Memcache 需要依赖 libevent 这样的系统类库),Redis ⾃⼰实现了事件处理的相关功能。

但与简单相对的是 Redis 具备相当的稳定性,在⼤量使⽤过程中,很少出现因为 Redis 自身 BUG 而导致宕掉的情况。

🚩客户端语言多

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

例如C、C++、Java、PHP、Python、NodeJS等,后续我们会对 Redis 的客⼾端使⽤做详细说明。

🚩持久化(Persistence)

通常看,将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢失,因此 Redis 提供了两种持久化⽅式:RDB 和 AOF,即可以⽤两种策略将内存的数据保存到硬盘中

这样就保证了数据的可持久性

🚩主从复制(Replication)

Redis 提供了复制功能,实现了多个相同数据的 Redis 副本(Replica)

复制功能是分布式 Redis 的基础。

🚩高可用(High Availability)和分布式(Distributed)

Redis 提供了⾼可⽤实现的 Redis 哨兵(Redis Sentinel),能够保证 Redis 结点的故障发现和故障⾃动转移。

也提供了 Redis 集群(Redis Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性

🎋Redis的使用场景

关于Redis 的使用场景我将围绕 Redis可以做什么 与 Redis 不可以做什么来进行介绍

🚩Redis 可以做什么?

要充分理解 Redis 的作⽤,需要读者对⽹站的架构有⼀定的基础理解,考虑到部分读者可能缺少这⽅⾯的背景知识,建议先移步为博主所写的《【Redis】 浅谈分布式架构》篇对该领域的基础知识做⼀定学习后,再度继续本篇的学习。

🎈缓存

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

🎈排行榜系统

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

🎈计数器应用

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

🎈社交网络

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

🎈消息队列系统

消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性。

Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是对于⼀般的消息队列功能基本可以满⾜

🚩Redis 不可以做什么

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

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

站在数据冷热的⻆度,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据,例如对于视频⽹站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,⽽⽤⼾的观看记录不⼀定是经常需要访问的数据,这⾥暂且不讨论两者数据规模的差异,单纯站在数据冷热的⻆度上看,视频信息属于热数据,⽤⼾观看记录属于冷数据。

如果将这些冷数据放在 Redis 上,基本上是对于内存的⼀种浪费,但是对于⼀些热数据可以放在 Redis 中加速读写,也可以减轻后端存储的负载,可以说是事半功倍

⭕总结

关于《【Redis】 初识 Redis》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
22天前
|
NoSQL Redis
redis红锁
在Redis集群中,若请求分布式锁成功后Master宕机且Slave未同步此锁,会导致锁被多次获取。为解决此问题,可对集群每个节点加锁,当大多数节点(N/2+1)加锁成功时,视为获取锁成功。尽管Redisson实现了红锁,但其无法确保每个锁分布在不同Master上,因此建议直接使用Redisson的普通锁。
30 5
|
3天前
|
NoSQL Redis
Redis事务长什么样?一文带你全面了解
Redis事务是一组命令的有序队列,通过MULTI、EXEC、WATCH和DISCARD等命令实现原子性操作。事务中的命令在EXEC执行前不会实际运行,而是先进入队列,确保所有命令要么全部成功,要么全部失败。此外,Redis还支持Lua脚本实现类似事务的操作,通常更简单高效。事务适用于购物车结算、秒杀活动、排行榜更新等需要保证数据一致性的场景。
13 0
|
存储 NoSQL Java
Redis3
Redis3
58 0
|
存储 NoSQL Redis
Redis介绍
Redis介绍
87 0
|
存储 缓存 NoSQL
|
存储 缓存 NoSQL
Redis初探
本篇深入介绍了Redis(Remote Dictionary Server)这一开源的内存数据存储系统,以及它在现代应用开发中的用途和优势。首先,我们对Redis进行了初步探索,解释了Redis是什么,它的主要特点以及适用场景。接着,我们详细讨论了Redis的安装和配置过程,提供了在Linux环境下安装Redis的步骤,并展示了如何启动和关闭Redis服务器。
227 0
|
NoSQL 安全 Unix
Redis (必看)
Redis 学习点滴 知识分享
89 0
|
存储 消息中间件 NoSQL
|
NoSQL Java Redis
|
存储 NoSQL Redis
什么是Redis?
什么是Redis?
128 2
什么是Redis?

热门文章

最新文章