Redis(1)

初识Redis

揆诸现实,Redis是众多公司使用的工具,本篇将带大家进入Redis的世界,了解它的前世今生,众多特性,典型应用场景,安装配置,如何用好等,最后会对Redis发展过程中的重要版本进行说明.

盛赞Redis

Redis的初心,最初就是用来作为一个"消息中间件"的消息队列(消息队列).也就是之前我们在多线程中讲到的分布式系统下的生产者消费者模型. 当前很少会直接使用Redis作为消息中间件(业界会又更多专业的中间件使用).

而现在Redis基本都是作为一个基于键值对的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),Bitmaps(位图)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景.

Redis和MySQL

MySQL最大的问题在于,访问速度比较慢,很多互联网产品中,对于性能要求是很高. 而Redis作为数据库使用,它的最大的优势就是--快!!(定性的角度,可以知道Redis快很多,但是很难定量衡量). 但和MySQL相比,最大的劣势,是它的存储空间是有限的. 虽然有不少互联网产品,对于性能的要求比较高的.更多的互联网产品对于性能要求没那么高.

而Redis是在分布式系统中,才能发挥威力的.如果只是单机程序,直接通过变量存储数据的方式,是比Redis更优的选择.(Redis就是基于网络,可以把自己内存中的变量给别的进程,甚至别的主机使用).

Redis特性

Redis之所以受到如此多公司的青睐,必然有其过人之处,下面介绍一下Redis的重要特性.

速度快

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

1.Redis的所有数据都是存放在内存中的,就比访问硬盘的数据库要快很多.

2.Redis核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构.

3.从网络角度上,Redis使用了IO多路复用的方式(使用一个线程,管理很多个socket~)

4.Redis使用的是单线程模型,减少了不必要的线程之间的竞争开销 .(有人可能会问,多线程不是更快吗? 实际上,多线程提高效率的前提是,CPU密集型的任务. 使用多个线程可以充分利用CPU多核资源. 但是Redis的核心任务,主要就是操作内存的数据结构,不会吃很多CPU).

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

MySQL主要是通过"表"的方式来存储组织数据的.属于"关系型数据库".

Redis主要是通过"键值对"的方式来存储组织数据的.属于"非关系型数据库".

丰富的功能

Redis还提供了许多额外的功能.

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

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

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

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

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

简单稳定

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

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

客户端语言多

Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入Redis,并且由于Redis受到广泛的认可,所以支持Redis的客户端语言也很多,几乎涵盖了主流的编程语言.

持久化(Persistence)

Redis是把数据存储在内存上的,而内存的数据是"易失"的.(由于进程退出/系统重启可能会导致丢失). 因此Redis会把数据存储在硬盘上. 内存为主,硬盘为辅.(硬盘相当于对内存的数据备份了一下).如果Redis重启了,就会在重启时加载硬盘中的备份数据,使Redis的内存恢复到重启前的状态.

主从复制

Redis提供了复制功能,实现了多个相同数据的Redis副本.复制功能是分布式Redis的基础.后续我们会对Redis的复制功能详细讲解. 主从服务架构如下:

从结点就相当于主节点的备份了.

**Redis可以做什么?**先不着急继续深入,让我们移步到分布式系统的演化来了解,敬请期待!

相关推荐
semantist@语校16 分钟前
第五十八篇|从城市节律到制度密度:近畿日本语学院的数据建模与关西语校结构工程
大数据·服务器·数据库·人工智能·百度·ai·知识图谱
小宇的天下42 分钟前
Calibre 工具的几何处理基础(11-1)
数据库·oracle
talenteddriver1 小时前
mysql: MySQL索引基础概念
数据库·mysql
king_harry1 小时前
PostgreSQL WAL 原理剖析、日志堆积治理与流复制监控
数据库·postgresql·wal·流复制
默默前行的虫虫1 小时前
nicegui网页多用户数据隔离总结
数据库·sql
特立独行的猫a2 小时前
PostgreSQL客户端工具介绍:从性能测试到跨平台管理
数据库·docker·postgresql·客户端·pgadmin4
微爱帮监所写信寄信2 小时前
微爱帮监狱写信寄信小程序:MySQL核心日志与备份恢复安全架构
数据库·mysql·小程序·邮局·监狱寄信·挂号信·邮政
isNotNullX2 小时前
数据迁移怎么做?有什么好用的数据库迁移工具推荐吗?
数据库·数字化·数据迁移·企业管理
任子菲阳3 小时前
学Javaweb第四天——springboot入门
java·spring·mybatis
云老大TG:@yunlaoda3603 小时前
华为云国际站代理商DAS的跨境合规适配的应用场景有哪些?
网络·数据库·华为云