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

相关推荐
夜光小兔纸30 分钟前
oracle查询出表中某几个字段值不唯一的数据
数据库·sql·oracle
deadknight93 小时前
Oracle密码过期处理方式
数据库·oracle
Ljubim.te3 小时前
数据库第01讲章节测验(选项顺序可能不同)
数据库
吱吱喔喔3 小时前
数据分表和分库原理
数据库·分表·分库
快乐非自愿3 小时前
KES数据库实践指南:探索KES数据库的事务隔离级别
数据库·oracle
一只fish3 小时前
Oracle的RECYCLEBIN回收站:轻松恢复误删对象
数据库·oracle
weixin_440401693 小时前
分布式锁——基于Redis分布式锁
java·数据库·spring boot·redis·分布式
TOR-NADO3 小时前
数据库概念题总结
数据库·oracle
云计算练习生3 小时前
理解MySQL核心技术:存储过程与函数的强大功能
数据库·mysql·存储过程·函数·mysql函数
zengson_g3 小时前
当需要对大量数据进行排序操作时,怎样优化内存使用和性能?
java·数据库·算法·排序算法