[Redis]使用和原理

Redis介绍

Redis 是⼀种基于键值对的 NoSQL 数据库, Redis 可以满足很多的应用场景,而且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能非常惊人。不仅如此,Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会丢失。总之,在合适的场景下,Redis非常好用

Redis特性

速度快

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

1.计算机的内存读速度是非常快的,Redis的所有数据都是存放在内存中的,所以把数据放在内存中是 Redis 速度快的最主要原因。

2.Redis 是用 C 语言实现的,一般来说 C 语言实现的程序离操作系统更近,执行速度相对会 更快。

3.Redis 使用了单线程,预防了多线程可能产生的竞争问题。 Redis 在 6.0 版本引入了多线程机制,但主要也是在处理网络和 IO,不涉及到数据命令,即命令的执行仍然采用了单线程模式。

4.作者对于 Redis 源代码可以说是精打细磨,曾经有人评价 Redis 是少有的集性能和优雅于一身的开源代码。

简单稳定

Redis 的简单主要表现在三个方面。首先,Redis 的源码很少,早期版本的代码只有 2 万行左右, 3.0 版本以后由于添加了集群特性,代码增至 5 万行左右,相对于很多 NoSQL 数据库来说代码量相对要少很多,也就意味着普通的开发和运维人员更容易掌握它。其次,Redis 使用单线程模型, 这样不仅使得 Redis 服务端处理模型变得简单,而且也使得客户端开发变得简单。最后,Redis 不需要依赖于操作系统中的类库,Redis 自己实现了 事件处理的相关功能。

Redis 具备相当的稳定性,在大量使用过程中,很少出现因为 Redis 自身 BUG 而导致挂掉的情况。

持久化

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

主从复制

Redis 提供了复制功能,实现了多个相同数据的 Redis 副本,复制功能是分布式 Redis 的基础。

高可用和分布式

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

适用性强

1.Redis 提供了简单的 TCP 通信协议,很多编程语言可以很方便地接入到 Redis,并且由于 Redis 受到社区和各大公司的广泛认可,所以支持 Redis 的客户端语言也非常多,几乎涵盖了主流的编程语言,例如 C、C++、Java、PHP、Python、NodeJS 等,后续我们会对 Redis 的客户端使用做详细说明。

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

3.提供了键过期功能,可以用来实现缓存。

提供了发布订阅功能,可以用来实现消息系统。

支持 Lua 脚本功能,可以利⽤ Lua 创造出新的 Redis 命令。

提供了简单的事务功能,能在一定程度上保证事务特性。

提供了流水线功能,这样客户端能将一批命令一次性传到 Redis,减少了网络的开销。

Redis使用场景

Redis常用于构建分布式系统,是分布式架构中的重要组成部分

具体请参考[Redis]在分布式架构中-CSDN博客

缓存(Cache)

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

排行榜系统

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

计数器应用

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

社交网络

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

消息队列系统

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

相关推荐
IT项目管理1 小时前
达梦数据库DMHS介绍及安装部署
linux·数据库
你都会上树?1 小时前
MySQL MVCC 详解
数据库·mysql
大春儿的试验田1 小时前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
likeGhee1 小时前
python缓存装饰器实现方案
开发语言·python·缓存
hqxstudying1 小时前
Redis为什么是单线程
java·redis
C182981825752 小时前
OOM电商系统订单缓存泄漏,这是泄漏还是溢出
java·spring·缓存
Ein hübscher Kerl.2 小时前
虚拟机上安装 MariaDB 及依赖包
数据库·mariadb
醇醛酸醚酮酯2 小时前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
GreatSQL社区3 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根3 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql